ALB-Lambdaの注意すべき点について

ALBのターゲットとして AWS Lambda 関数を設定し、バックエンドへのある種のプロキシとして使用する場合がありました。
Lambda関数の制約としては実行時間15分の制限などは有名ですが、ALBのターゲットとして使う場合に注意すべき設定について、少しつまづいたので整理してみました。

ペイロードサイズの制約について

ALB-Lambdaのリクエストおよびレスポンスのペイロードのサイズ上限は1MB となります。
通常のLambdaの場合、同期呼び出しの場合は6MB、非同期呼び出しの場合は1MB ですので、同期呼び出しと比較するとかなりの制限に感じます。

ALB-Lambdaへのペイロードサイズによる制限

バックエンド処理によっては、ペイロードが1MBを超える可能性は多いにあります。(例:ファイルアップロード処理など)
この制限は緩和不可能のため、ALB-Lambdaを使用する場合は、設計段階でペイロードサイズの上限=1MB については認識しておく必要があります。1MBを将来的にせよ超える可能性のある場合はLambda以外の手段を検討する必要があると思います。
代替としては、EC2やECSでproxy を実装するより他無いと思っています。

(* 正確にはリクエストに対してはリクエストボディのサイズに対する制限、レスポンスに対してはLambdaが出力するJSONのサイズに対する制限のようです。)

複数値ヘッダーの使用について

バックエンドとやり取りするヘッダーに複数値のものがある場合、ターゲットグループで「複数値のヘッダー」をオンにする設定が必要です。この設定を欠いた場合は、複数値のうちの最後の値のみ使用される、という仕様があります。

具体的にはCookieの使用が分かりよいでしょう。
例えば、クライアントからALB-Lambdaへのリクエストクッキーに name1=val1/name2=val2 という二つのクッキーを含んでいたとしましょう。

ヘッダーの観点から見ると、

:
"cookie":"name1=val1",
"cookie":"name2=val2",
:

のように、”cookie”ヘッダの値として、”name1=val1″ , “name2=val2″ と二つの値を持つケースです。

複数値ヘッダーをオフの状態の場合は以下のように最初の値が欠落してLambdaにわたります。多くの場合、意図した動作にならないでしょう。仕様としては、単一ヘッダの複数値は”最後の値のみが渡される” です。

ALB-Lambdaの複数値ヘッダーの扱いと欠落について

また、Lambdaが受け取るイベントの形式は「複数値のヘッダー」のオン・オフで異なるものになるため、Lambdaのロジックに影響があります。詳細は以下のドキュメントに詳しいです。

Lambda 関数を Application Load Balancer のターゲットとして使用する - ELB
Lambda 関数をターゲットとして Application Load Balancer に登録する方法について説明します。

まとめ

調べるとドキュメントには書いていることではありますが(どんなナレッジもそうでしょうが)、そもそもそういう固有の制約があるということに考えが至らず、少し引っ掛かりました。聞いたことある程度でも頭に残っていれば、事前に調べる対応もとれたなと思っています。

みなさんの頭の片隅に欠片でもこの内容が残っていれば幸いです。

著者について

好きなAWSサービス:基本的なもの。低レイヤーなもの。
          EC2,KMS,S3,VPC,Cloudformation...
苦手なAWSサービス:複合的なもの。何かをラッピングしたもの(SAMとか?)
2024 Japan AWS All Certifications Engineers

大江 彰一朗をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSアプリケーション開発クラウドソリューション
シェアする
タイトルとURLをコピーしました