Lambda関連のことを調べてみた2023年08月17日

Lambda関連のことを調べてみた2023年08月17日
目次

WebページのSorryページをALBとLambdaのみで自動切替できるようにしてみた

目的

– ALB配下のEC2が全停止したらSorryページを表示

上記を実装するにあたり色々調べたが一か所に集約されていなかったため
記事にまとめてみようと思う。

前提

– 既に運用中のWebサイトがある
– WebサイトをAWSで構築している

利用するサービス

– ALB
– Lambda
– CloudWatch

実装方法

– ALB

まずALBのリスナールールに通常のWebサイトを
ターゲットとするルールに加えて、メンテナンスページ用のルールを
追加する。

①リスナールールの作成
 →条件に「パス」=「*」
 →「固定レスポンスを返す」を選択
 →レスポンスコード:503
 →メッセージの形式:text/html
 →レスポンス本文:以下参照

“`html


Sorry Page

Webサイト名を入力

現在、メンテナンス中です。以下の時間帯ではサービスがご利用いただけません

元記事を表示

Lambda(Node.js)でBox Platform APIを使用する

## APIを実行するBOXユーザアカウントについて
管理対象ユーザ(通常のBoxユーザ)とBox Platformユーザがあります。
管理対象ユーザを特定の個人と関連づけられないユースケースで使用することは禁止されています。APIを使用してバッチ処理を行う場合などは必ずBox Platformユーザを使用します。

– [Fair Use Policy | Box](https://www.box.com/legal/fairusepolicy)
– [ユーザータイプ – Box Developerドキュメント](https://ja.developer.box.com/guides/getting-started/user-types/)

## カスタムアプリの作成
Box Platform APIを使用するにはBoxでマイアプリを作成する必要があります。

1. Boxの開発者コンソールにアクセスする。
– 初回は[こちら](https://ja.developer.box.com/)の「開発者コンソールに移動」からアクセスする。一度アクセスすると、Box UIの左下に

元記事を表示

NestJSをAPI Gateway + AWS Lambdaで構成する(その8) AWSへのデプロイ

#
– [その1 NestJSやLambdaでのnode.jsの話し](https://qiita.com/ssugimoto/items/988320d34022555401fb)
– [その2 NestJSのサンプルを動かす、Hello World.](https://qiita.com/ssugimoto/items/557e7a7cce5111bf5de7)
– [その3 コントローラーを追加する](https://qiita.com/ssugimoto/items/fcfbc9a176bcf41d7b45)
– [その4 DTOを使う](https://qiita.com/ssugimoto/items/613b8ab54bd6f8de043c)
– [その5 CRUD generatorを使い modules,controller, service, dto を生成する](https://qiita.com/ssugimoto/items/64a9c3cd5cb33e06f4c9)
– [その6 インターセプタ](https://qiita.com/ssugimoto/it

元記事を表示

EC2にエラーがあった際にSlackに通知

「CloudWatch」でEC2を監視しアラームが発生すれば「Slack」に通知方法について学習をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。

# 事前にやっておくこと
・Slackのアカウントを作成
・通知する「チャンネル」を作成

# 学習内容
対象のEC2インスタンスを「CloudWatch」で監視し、「Lambda関数」でアラームが発生すればSlackにアラームが発生したことを通知します。

# Lambda関数の作成

検索で「Lambda」>「関数の作成」をクリック

`一から作成`
関数名:`任意の名前`
ランタイム:`Python3.8`
アーキテクチャ:`x86_64`
上記を設定し作成。

作成後、作成した「Lambda関数」の詳細に入り「コードタブ」の「pyファイル」に以下の記載しました。

“`
import urllib3
import json

http = urllib3.PoolManager()

def lambda_handler(event, context):
url = “【SlackのWeb

元記事を表示

Lambdaで自動でEC2の起動・停止

Lambdaについて学習をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。

# 事前にやっておくこと
・EC2インスタンス作成しておく

# IAMロールの作成
検索で「IAM」に入り「ポリシー」>「ポリシーを作成」をクリックし上部の「JSON」を選択し以下の権限が記述されたコードを記載しました。

“`
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogGroup”,
“logs:CreateLogStream”,
“logs:PutLogEvents”
],
“Resource”: “arn:aws:logs:*:*:*”
},
{
“Effec

元記事を表示

Lambda(Node.js)で Secrets Manager を使用する

[AWS Parameters and Secrets Lambda Extension](https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/retrieving-secrets_lambda.html)を使用して、Lambdaからシークレットマネージャーの値を取得します。
シークレットがキャッシュされるので、SDKで取得するより高速かつコスト削減になります。

## AWS CDK
“`typescript:lib/sample-stack.ts
import { Construct } from ‘constructs’;
import * as cdk from ‘aws-cdk-lib’;
import * as lambda from ‘aws-cdk-lib/aws-lambda’;
import * as lambdaNodeJs from ‘aws-cdk-lib/aws-lambda-nodejs’;
import * as sm from ‘aws-cdk-lib/aws-secre

元記事を表示

TerraformでAWS Lambdaのauto scaling(provisioned concurrency)を設定してみた

# はじめに
AWS Lambda + SpringNativeでWebAPIを構築したときに、
SpringNativeといえどもコールドスタートが発生するため、
provisioned concurrencyを設定していました。

ただしprovisioned concurrencyを固定値にしていたので、
auto scalingに変更しました。

# TL;DL
比較的簡単にできました。
ソースは[ここ](https://github.com/swdevsmz/lambda-autoscale)に置いてあります。

# やったこと

## Lambda関数の作成

Lambda関数を作成します。
関数は複数個作ることを想定しているため、
関数のパラメーターをリスト化しています。

パラメーターの中に予約実行を設定するかのフラグを持たせています。
また予約実行をする場合に`スケジュールされたオートスケール`か`ターゲット追跡のオートスケール`かを設定するようにしています。

これらのパラメーターを使い、lambdaのリソースを作るときにfor_eachで関数を作成するようにして

元記事を表示

[備忘録] Error: spawnSync docker ENOENTの解消

# はじめに
AWS CDKで Lambda を作成、デプロイしようとしたところ下記エラーが発生した。

“`
% cdk deploy
Error: spawnSync docker ENOENT
at Object.spawnSync (node:internal/child_process:1111:20)
at spawnSync (node:child_process:814:24)
at dockerExec (/Users/user/Documents/app/node_modules/aws-cdk-lib/core/lib/private/asset-staging.js:1:3385)
at Function.fromBuild (/Users/user/Documents/app/node_modules/aws-cdk-lib/core/lib/bundling.js:1:4085)
at new Bundling (/Users/user/Documents/app/node_modules/aws-cdk-lib/a

元記事を表示

【データ基盤構築/AWS】Lambda Layerを使ってLambdaでpandasライブラリを使用する方法

# 今回の課題
AWS Lambdaでpandasライブラリを使用したかった。
それにあたり、pandasが入った自作のLambda Layerを使用してLambdaを実行したのだが、
エラーが発生してしまったので解決する手順を記事にした。

## 躓いた箇所

以下の手順でLayerを作成して、Lambdaを実行してみた。
すると、依存関係系のエラーが発生してしまった。

### Layerを作成した手順
1. ローカルに`python`フォルダを作成
1. `python`フォルダ内で、`$ pip install -t . pandas`コマンドを実行してpandasをインストール
1. `$ zip -r9 layers.zip`コマンドを実行して`python`ファイルをzipファイルに圧縮
1. zipファイルをLayer作成画面でアップロード![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/f5612627-ab67-26b3-5d76-f82facb719a7

元記事を表示

AWSでデータ分析基盤構築をサクッと始めてみる(5.Lambdaで分析自動化編)

# シリーズ目次

[AWSでデータ分析基盤構築をサクッと始めてみる(1.データカタログ作成編(行指向))](https://qiita.com/maechan55/items/d69ebcae324771f14a4e)
[AWSでデータ分析基盤構築をサクッと始めてみる(2.行指向から列指向に変換編)](https://qiita.com/maechan55/items/608c11382cecf6bdb0a4)
[AWSでデータ分析基盤構築をサクッと始めてみる(3.データカタログ作成編(列指向))](https://qiita.com/maechan55/items/33fa79330c76f1e59166)
[AWSでデータ分析基盤構築をサクッと始めてみる(4.Athenaでアドホック分析編)](https://qiita.com/maechan55/items/84cfb8d5347d71dc3f71)
[AWSでデータ分析基盤構築をサクッと始めてみる(5.Lambdaで分析自動化編)](https://qiita.com/maecha

元記事を表示

推論エンドポイントを放置するとどえらいコストがかかるので Lambda と EventBridge で自動削除する

# はじめに

こんにちは。先日 SageMaker で推論エンドポイント作って放置していたら 2 日で 1 万円ぐらい請求金額が跳ね上がって泣きました。
テストで 2・3 個、推論エンドポイントを作ったのですが、できたことに満足して削除を怠ってしまいました・・・。
というわけで、このような悲劇を防ぐために、Lambda と EventBridge で推論エンドポイントを自動削除する仕組みを作ってみました。

# 推論エンドポイントを自動削除する Lambda

本記事では、あくまで開発時の削除漏れを目的としているので、用意した Lambda は、推論エンドポイントを全て削除しています。

“`python
import boto3
from typing import Dict, Any

def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, Any]:
“””
AWS Lambda関数のハンドラで、指定されたSageMakerエンドポイントを一括削除します。

:para

元記事を表示

CDK + API Gateway + Lambda Proxy + API Key 構成でCORSを回避するためにOPTIONSだけ認証を外したい

## 課題

以下の構成でAWSリソースを作ろうとしています。

– **AWS CDK (typescript)**
– AWS のリソースをコードで管理したい
– **Lambda**
– FastAPI 製の API を提供したい
– **API Gateway**
– API のエンドポイントとして提供したい
– Lambda で提供する機能をプロキシしたい
– API Key を設定して、アクセスを制限したい(Lambda 内でやってもいいが、できれば API Gateway で弾いておきたい…)

上記の構成を取りたい場合、以下の構成を取るのが自然です。

“`tsx
const mainApi = new RestApi(this, `Api`, {
// …一部設定を省略
defaultCorsPreflightOptions: {
allowOrigins: Cors.ALL_ORIGINS,
allowMethods: Cors.ALL_METHODS,
allowHeaders: Cors

元記事を表示

既存AWS構成をTerraformでIaC化(CloudWatch, Lambda, IAM)

## はじめに
今回は前回の続きです。Lambda部分をTerraformでIaC化していきます。
前回ではVPC回りとAPI Gateway構成部分をTerraformでIaC化しました。以下がその記録です。

https://qiita.com/kennyQiita/items/efa452ca81528acb8270

ちなみにIaC化する前提構成は前回と同じままです(以下図)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/bc17bb9b-74f2-e029-3214-bace0963c74b.png)

今回の実施内容としては以下となります。
* CloudWatchLogs管理をTerraform管理に変更
* Lambdaで利用するIAMロールをTerraform管理に変更
* LambdaをTerraform管理に変更

## IaC化
### CloudWatchLogs
Lambdaに関わるCloudWatchLogsのロググループだけでなく、本構

元記事を表示

Node.js + LambdaでDDNSのIP紐づけが切れていないか監視する

#### DDNS(ダイナミックドメインネームシステム)って?

DDNS(ダイナミックドメインネームシステム)とは、動的に割り当てられているIPアドレスとドメイン名を紐づけてくれるものです。

https://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0#:~:text=%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%20(Dynamic,%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B%E4%BB%95

元記事を表示

CodeCommitにサーバーレス(Lambda)の定期実行でPushする

## はじめに
CodeCommitで管理しているリポジトリにサーバーレスの定期実行でPushする、ということをやってみたのでそのやり方を残したいと思います。
本記事では、試しに[YAHOO!ニュース(ITカテゴリ)のRSS](https://news.yahoo.co.jp/rss/categories/it.xml “news.yahoo.co.jp/rss/categories/it.xml”)を取得して、JSON形式で保存する。というユースケースでやり方の紹介をします。

# 目次

1. [はじめに](#はじめに)
2. [前提](#前提)
3. [準備](#準備)
4. [権限の設定](#権限の設定)
5. [Lambda関数作成](#lambda関数作成)
5. [Lambda関数の登録](#lambda関数の登録)
6. [おわりに](#おわりに)

## 前提
1\. 以下のツールがインストールされていること。
“`
node18
yarn
aws-cli
“`
2\. Push先のリポジトリの作成と、initial c

元記事を表示

Amazon Aurora(PostgreSQL互換)でLambdaをトリガする際のプラクティス

# はじめに
AWSを使っていると、業務用のデータはリレーショナルデータベースに入れて、バックエンドのシステムに転送するような履歴情報は扱いが容易なKVSに入れたくなるような業務要件がよくある。
履歴情報の処理はリレーショナルデータベースでも実現できるが、1つ1つの処理のシンプルさを考慮すると、非同期でバックエンド処理をした方が良い。
Auroraには、Lambdaをイベントトリガで起動する機能があるので、まさにうってつけの機能と言える。これと、PostgreSQLのトリガプロシージャの機能を用いて非同期処理を実現できるだろう。
まずは、昨日の概要は[公式のユーザーガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/PostgreSQL-Lambda.html#PostgreSQL-Lambda-network)を確認してみていただきたい。

ただし、本当に冪等性高く、漏れなく処理ができるのかが気になったので、本記事で検証をしてみた。
なお、AuroraはPostgreSQL互換を使用している。

元記事を表示

サーバーレスアーキテクチャで翻訳 Web API を構築してみた【AWS Hands-on for Beginners Serverless #1】

# はじめに
AWS認定試験の勉強している時にサーバレスアーキテクチャに関する問題がたくさん出てきました。
なので復習もかねて、今回は[AWS Hands-on for Beginners Serverless #1](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-reg-event.html?trk=aws_introduction_page)を参考に、サーバレスアーキテクチャを実際に構築していきたいと思います。
# 学習するサービス
– AWS Lambda
– Amazon API Gateway
– Amazon DynamoDB
– Amazon Translate

# AWS Hands-on for Beginners Serverless #1の概要
このハンズオンでは、”こんにちは” と入力すると “Hello” と返すWebAPIを作成します。

構築する構成図は以下になります。
![Hands-On-for-Beginners_2022_Se

元記事を表示

実はLambdaの関数URLは署名付きURL化できるよ、29秒の壁も越えられるよ、という話

# この記事を2行で

– S3の署名付きURLと同じことが、Lambdaの関数URLにもできます
– Lambdaの署名付きURLを使えば、APIGatewayの29秒タイムアウトを超えてLambdaを実行できます

## 何が嬉しいの?

– AIのように時間のかかる処理を、Lambdaだけで処理できます
– 署名付きURLなので、Cognito + APIGatewayのような認証がそのまま使えます

## どうやって?

– Lambdaの関数URLは`API Gatewayの29秒タイムアウト制限の影響を受けない`
– S3の署名付きURLと同じ認証方法が、Lambdaの関数URLでも使える
– ※サービスはLambdaだけ、ライブラリもboto3の標準機能だけで実現できます

## このあたりの事情を説明(APIGatewayのタイムアウト制限とは?)

AWSのLambdaは、15分かかる処理までは受け付けることができます。
ただ、APIGatewayは、レスポンスを返すのに29秒以上かかるリクエストを強制的に中断する仕様になっています。

Lambdaは何しろ安

元記事を表示

【AWS】Lambdaのyamlによる移管方法

### 1. LambdaのSAM(yaml)とデプロイパッケージ(zip)をダウンロード
2. 移行する Lambda 関数のコンソール画面へ移動
3. Lambda 関数ウィンドウで [アクション] を選択し、[関数のエクスポート] を選択
4. [ AWS SAM ファイルのダウンロード ] を選択してダウンロード
5. [デプロイパッケージのダウンロード] を選択してダウンロード

### 2. 移行先のAWSのS3にデプロイパッケージをアップロード
1. 適当なバケットに先ほどダウンロードしたデプロイパッケージ(zip)をアップロードする
1. ファイルのS3 URIをコピーしておく

### 3. CloudFormationでLambda 関数をデプロイする
1. ダウンロードしたSAM ファイルを開く
“`
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: ‘AWS::Serverless-2016-10-31’
Description: An AWS Serv

元記事を表示

CDKでNode.jsのLambda関数を作るときにjs|ts以外のファイルをバンドルする

# TL;DR

`bundling.commandHooks.beforeBundling`
を定義して、その中で`cp`でコピーしてあげればOK!

“`ts
new NodejsFunction(this, ‘lambda’, {
runtime: Runtime.NODEJS_18_X,
architecture: Architecture.ARM_64,
functionName: ‘my-nodejs-function’,
handler: ‘handler’,
entry: ‘lambda/index.ts’,
bundling: {
commandHooks: {
beforeBundling(inputDir: string, outputDir: string): string[] {
return [`cp ${inputDir}/lambda/hoge.txt ${outputDir}`];
},
afterBundling(): string[] {
retu

元記事を表示

OTHERカテゴリの最新記事