あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

【AWS】APIGatewayのLambdaプロキシ統合について

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プロキシ統合なしの「統合レスポンス」のデフォルトはこんな感じ。



感想

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