APIGatewayのLambdaプロキシ統合について
Lambdaプロキシ統合とは
APIGatewayが受け取ったリクエストをそのままLambdaに渡し、Lambdaのレスポンスをそのままクライアントに返す方式。リクエスト/レスポンスのマッピング設定をする必要がないためシンプルなAPIを構築できる。
Lambdaプロキシ統合有無比較
| 項目 | Lambdaプロキシ統合を使う場合 | Lambdaプロキシ統合を使わない場合 |
|---|---|---|
| バックエンド | AWS Lambda | EC2, ECS, Lambda, HTTPエンドポイント etc |
| サーバーレス | 〇 | ×(HTTP統合やAWSサービス統合の場合は不要) |
| スケーラビリティ | 自動スケール | バックエンドのスケールに依存 |
| コスト | 実行時間に応じた課金 | EC2/ECSの運用コスト |
| 遅延 | コールドスタートあり | 低遅延(Lambdaより早い可能性) |
| 管理負担 | 低い(コードのみ) | 高い(サーバー管理が必要) |
| AWSサービス統合 | 〇(他のAWSサービスと簡単に連携) | DynamoDB、S3への直接統合可能 |
確認
実際に環境にLambdaプロキシ統合有り無しで作成し違いを確認してみる。
実践!
1.Lambdaプロキシ統合環境作成
1-1.下記でLambda作成
関数名:ProxyLambda
ランタイム:Python3.13
実行ロール:AWSLambdaBasicExecutionRoleポリシーを持つロール
コード:
import json def lambda_handler(event, context): print("Received event:", json.dumps(event)) # デバッグ用 return { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "body": json.dumps({"message": "Hello, API Gateway!"}) }
1-2.下記でAPIGatway作成
APIタイプ:REST API
API名:ProxyAPIGateway
リソース:
リソース名:/hello
メソッド:GET
Lambdaプロキシ統合有効:✅

2.Lambdaプロキシ統合なしの環境作成
2-1.下記でLambda作成
関数名:NonProxyLambda
ランタイム:Python3.13
実行ロール:AWSLambdaBasicExecutionRoleポリシーを持つロール
コード:1-2と同じものを設定
2-2.下記でAPIGatway作成
APIタイプ:REST API
API名:NonProxyAPIGateway
リソース:
リソース名:/hello
メソッド:GET
Lambdaプロキシ統合有効:□

3.接続
3-1.Lambdaプロキシ統合へ接続
※bodyだけ返すためこの表記になる。

レスポンスの型が固定になるので「統合レスポンス」は設定できなくなる。

3-2.Lambdaプロキシ統合無へ接続
※APIGatewayがLambdaから受け取ったStatusCodeなどを処理し、追加でStatusCodeなどを付与するためこの表記になる。

※Chromeだと「プリティ プリント」なるものがあって、チェックするとJSONが見やすくなる!

Lambdaプロキシ統合なしの「統合レスポンス」のデフォルトはこんな感じ。

感想
「プリティ プリント」って名前がうざい、、、