Lambda Functionsを ALB のターゲットとして使用する場合、複数値ヘッダーの有効化をしないとクエリストリングなどの値が捨てられる場合がある

さいきんは便利な社会になっており、Lambda FunctionsをALBの後ろに直接配置して、HTTPリクエストをシュッとLambdaで受けるなんてことができます。

さて、話が変わって、いわゆるREST APIでは、参照系の操作をGETで行い、パラメータはクエリストリングで渡す、ということが行われます。このとき、たとえばidの配列を渡したいばあい、id=1&id=2というように「おなじキーで別の値を渡す」という方法が取れれることがあります。これはOpenAPIv3のspecificationでもquery parameterのデフォルトの渡し方となっています

一方、複数値ヘッダーの有効化がなされていないLambda FunctionsをターゲットとしたALBは、クエリストリングにおいて重複したキーがある場合、最後の値のみを拾ってLambdaに渡します。

つまり、id=1&id=2&id=3のようなクエリストリングを渡しても、Lambdaに渡ってくるイベントではid=3のみが渡ってくるわけです。

この挙動を変更し、1,2,3すべてを拾いたい場合は、複数値ヘッダーの有効化をする必要があります。詳細は公式のドキュメントに当たるとよいでしょう。

Lambda 関数を Application Load Balancer のターゲットとして使用する - エラスティックロードバランシング