CHAPTER 02 / D1 / D4
Lambda と API Gateway
呼び出し方式・同時実行・APIの入口を理解する。
01 / Lambdaは「誰が呼ぶか」で動きが変わる
Lambdaはイベントを受け取り、ハンドラーを実行します。イベントは、APIリクエスト、S3へのファイル追加、SQSのメッセージなどです。最初に同期・非同期・イベントソースマッピングのどれかを見分けます。
| 呼び方 | 代表例 | 結果と失敗の扱い |
|---|---|---|
| 同期呼び出し | API Gateway → Lambda | 呼び出し元が結果を待つ。関数エラーの再試行は呼び出し元の責任 |
| 非同期呼び出し | S3通知 / SNS → Lambda | Lambdaがイベントをキューへ受け付ける。関数エラーは既定で追加2回再試行 |
| イベントソースマッピング | SQS / Kinesis / DynamoDB Streams → Lambda | Lambda側がポーリングしてバッチを渡す。再試行・破棄はソースの設定と種類に依存 |
非同期呼び出しのDestinationsは成功時・失敗時の実行記録を後続サービスへ送れます。非同期用DLQは処理できなかったイベントを退避します。スロットリングやサービスエラーの再試行は関数エラーの「2回」と同じ規則ではなく、イベントの最大有効期間などの設定も関係します。
公式資料:Lambda の再試行
02 / 実行環境と設定を押さえる
| 設定・概念 | 意味 | 判断のポイント |
|---|---|---|
| メモリ | メモリ量に応じてCPU性能も変わる | 増やすと時間が短くなる場合がある。実測で料金と時間を比較 |
| タイムアウト | 実行を許す最大時間 | 下流呼び出しのタイムアウトも合わせて設計。Lambdaの上限は15分 |
| 環境変数 | 環境ごとの設定値 | テーブル名などを注入。秘密値の保管・ローテーションは専用サービスを検討 |
| Layer | 共通ライブラリ等の共有単位 | 実行するコードの互換性・パッケージのバージョンを管理 |
| Extension | ログ・監視などの機能を追加 | 関数の処理と別の補助機能。リソース消費も考える |
| バージョン / エイリアス | 公開済みバージョンは変更不可。エイリアスは参照先を持つ名前 | prodをv10へ向ける。加重エイリアスで一部をv11へ送る |
初回やスケール時には、実行環境の初期化によるコールドスタートが起きることがあります。SDKクライアントの初期化をハンドラー外へ置くと、環境再利用時の無駄を減らせます。ただし、利用者固有のデータをグローバル変数に残さないようにします。
03 / 同時実行数と起動の速さを分ける
安定した負荷なら、同時実行数の目安は1秒あたりの要求数 × 平均実行時間(秒)です。毎秒200件、平均0.25秒なら約50。ただし、ピークや処理時間のばらつきを考える余裕が必要です。
| 要件 | まず検討する設定 |
|---|---|
| 他の関数に枠を使われたくない / 下流DBへの負荷を制限したい | Reserved concurrency。枠を確保し、同時実行の上限にもする |
| 初期化待ちを減らし、対話APIの応答時間を安定させたい | Provisioned concurrency。追加料金と必要な時間帯・個数を評価 |
公式資料:同時実行の設定
04 / API Gatewayの責任
API GatewayはHTTPリクエストの受付、認証連携、スロットリング、ルーティングなどを担当します。REST APIとHTTP APIの機能差を区別し、設問の要件で選びます。
| 要件 | 選択の目安 |
|---|---|
| APIキー・使用量プラン、リクエスト検証、組み込みキャッシュ | REST APIの機能を検討 |
| 比較的単純なHTTPバックエンド連携、標準JWT authorizer | HTTP APIの機能を検討 |
| ブラウザから別オリジンのAPIを呼ぶ | CORSの許可元・メソッド・ヘッダーを設定。CORSは認証の代わりにはならない |
| 利用者ごとの認可 | Cognito / JWT authorizer / Lambda authorizer / IAMなど、API種類に合う方式 |
| リクエスト急増 | スロットリングとバックエンドの容量を確認。APIキーをユーザー認証の代替にしない |
Lambdaプロキシ統合では、イベントの形式とレスポンスの形式を合わせます。REST APIの典型的な戻り値は、statusCode、headers、文字列化したbodyです。HTTP APIのペイロードバージョンとは差があるため、統合設定を確認します。
import json
def handler(event, context):
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps({"message": "ok"})
}05 / VPC接続でつまずく理由
プライベートなRDSなどへ接続するためにLambdaをVPCへ接続します。ここでパブリックサブネットを選んでも、LambdaにパブリックIPが付いてインターネットへ出られるわけではありません。
IPv4でインターネット上のAPIへ出るなら、通常はプライベートサブネットからNAT Gateway等を通る経路を使います。S3・DynamoDBなど対応するAWSサービスへの通信にはVPCエンドポイントも選択肢です。ルート、セキュリティグループ、DNS、IAMをそれぞれ確認します。
公式資料:VPC 接続 Lambda のインターネットアクセス
調査練習:突然タイムアウトする
LambdaをVPCへ接続した直後、外部の決済APIだけがタイムアウトした。最初にどこを見る?
考え方・解答例
サブネットから外への経路、NAT Gateway等、セキュリティグループの送信、DNSを確認します。RDSへ接続できても外部へ出る経路があるとは限りません。タイムアウト値だけを増やしても経路は作れません。
06 / 確認問題
07 / この章の到達点
上のチェックは、このページでの振り返り用です。章単位の進捗は下のボタンで記録できます。
公式資料
内容確認日:2026年11月8日。仕様の詳細や更新情報は、各公式資料で確認できます。
理解を確認できたら、章の進捗を記録できます。