AWS Lambdaとは
- サーバーレスでコードを実行できるサービス
- EC2のようにサーバーを管理する必要がなく、関数単位でコードを実行可能
- 料金は「リクエスト数」と「実行時間(メモリ量 × 秒)」に応じて発生
- 典型的な利用例
- API Gateway + Lambda → REST APIバックエンド
- S3イベント + Lambda → ファイルアップロード処理
- DynamoDB Streams + Lambda → データ変更トリガー
レイヤー(Lambda Layers)
-
複数のLambda関数で共有したいライブラリや依存関係を外出しできる仕組み
-
例:
- 共通のPythonライブラリ(NumPy, Pandasなど)
- 共通のユーティリティ関数
-
各Lambda関数のデプロイパッケージを軽量化できる
-
最大5つのレイヤーを1つのLambda関数に適用可能
Lambda関数
├─ 自分のコード
├─ レイヤー1(共通ライブラリA)
├─ レイヤー2(共通ライブラリB)
Invocation(呼び出し)
- Lambda関数を実行することを「Invocation」と呼ぶ
- Invocationには以下の2種類があります:
1. 同期呼び出し(Synchronous Invocation)
-
呼び出し元が Lambdaの処理完了を待つ
-
例:
- API Gateway → Lambda
- CLI/SDKからの直接呼び出し
2. 非同期呼び出し(Asynchronous Invocation)
-
呼び出し元は イベントを投げるだけで待たない
-
Lambdaは裏でキューに入れて処理
-
例:
- S3イベント → Lambda
- SNS → Lambda
非同期呼び出しの場合、失敗したらリトライ(最大2回)+ デッドレターキュー(SQS/SNS)に送信可能
イメージ
イベント発生
├─ API Gateway
├─ S3 (ファイルアップロード)
├─ DynamoDB Streams
└─ 他のAWSサービス
│
▼
[ Invocation ]
├─ 同期呼び出し (レスポンスを待つ)
└─ 非同期呼び出し (待たずに処理をキューへ)
│
▼
[ Lambda 実行環境 ]
├─ レイヤー (共通ライブラリ/依存関係)
│ ├─ NumPy, Pandas, 共通関数 etc.
│
├─ ユーザーコード (関数本体)
│
└─ 実行結果
│
▼
呼び出し元 or 後続処理