Visual Studio C# のコードから AWS Lambda にデプロイする方法を覚え書きしたことから始まり、Lambda のスロットリングの挙動について や Lambda の502エラーの対応方法について ご紹介してきましたが、今回も Lambda 関連で続きまして API Gateway で Lambda プロキシ統合を使用するのと使用しないのとの違いにつきまして、調査してみました。
前提条件
・Windows10 Pro 64Bit 2004
・Visual Studio 2019 Community v16.9.4
・C# .NET Core 3.1
・AWS Lambda
1.プロキシ統合の設定について
AWS API Gateway のコンソール を開きます。
API Gateway > API 名 > ANY > 統合リクエスト を辿り、以下の画像のように「Lambda プロキシ統合の使用」のチェックをON/OFFすることにより設定を変更可能です。設定を変更した場合は、API をデプロイするまで設定が反映されませんので、注意が必要です。

2.違いについて
API Gateway の Lambda プロキシ統合を使用する設定とそうでない場合の違いを以下にまとめてみました。違いは主にリクエスト・レスポンスの形式が異なってくるという点です。
|
プロキシ統合 使用する |
プロキシ統合 使用しない |
リクエスト |
bodyの内部のみ送信可能 |
body以外にもheaderやその他の項目をつけて送信可能 |
レスポンス |
bodyの内部のみ受信可能 JSONのフォーマット違いでHTTPステータスコード502のエラーになる。
| body以外にもheaderやその他の項目も含めてbody扱いされて受信可能 JSONのフォーマット違いでHTTPステータスコード502のエラーになることはない。 |
上記の違いについてそれぞれ確認した結果を以下に掲載します。
3.リクエストの形式
プロキシ統合を使用する場合は、Body の内部のみを JSON で送信します。
プロキシ統合を使用しない場合は、Body の記述も含めて JSON で送信します。
※以下の JSON は以前の記事「Visual Studio C# のコードから AWS Lambda にデプロイする方法」で実装している Lambda 関数に対するリクエスト方法の例です。
プロキシ統合を使用する場合{
"value1": 3, "value2": 4
}
プロキシ統合を使用しない場合{
"body": "{\"value1\": 3, \"value2\": 4}"
}
4.レスポンスの形式
Lambda の C# ソースからは同じ JSON を返却していますが、
プロキシ統合を使用する場合は、Body の内部のみが JSON で受信できます。また、Lambda から返す JSON のフォーマットが厳格になります。
プロキシ統合を使用しない場合は、Body やほかの項目の記述も含めて任意の JSON で受信できます。
※以下の JSON は以前の記事「Visual Studio C# のコードから AWS Lambda にデプロイする方法」で実装している Lambda 関数からのレスポンスの例です。
プロキシ統合を使用する場合{
"result": 24
}
プロキシ統合を使用しない場合{
"isBase64Encoded": false,
"statusCode": 200,
"headers": {
"x-custom-header": "my custom header value"
},
"body": "{\"result\": 24}"
}
5.エビデンス
念のため以下に上記のエビデンスを貼っておきます。
※API Gateway の外から API Gateway 経由で Lambda を実行しています。
プロキシ統合を使用する場合

プロキシ統合を使用しない場合

以上が、Lambda プロキシ統合を使用する場合と使用しない場合の違いについてまとめてみた結果となります。
- 関連記事
-