複数値を持つ RequestHeader/ResponseHeader がたまにあります。通常こういったリクエストが来た場合でも Event オブジェクトの Headers はただ単純にマップでしかないので、同一キーに対して値は一つです。レスポンスもマップというデータ構造を使っているときには当たり前ですが、同一キーに対して値は一つです。
ALB のターゲットグループに対して lambda.multi_value_headers.enabled 属性を true とすることによりこれに対応できます。このオプションは以下のようなコマンドで変更可能です。
aws elbv2 modify-target-group-attributes \ --target-group-arn <value> \ --attributes <value>
このオプションに変更する際は Lambda 関数の実装自体も変更する必要があります。以下のように multiValueHeaders をキーとして Map<String, List
{ "multiValueHeaders": { "Set-cookie": [ "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly", "cookie-name=cookie-value;Expires=May 8, 2019" ], "Content-Type": ["application/json"] } }
参考: ターゲットとしての Lambda 関数 - Elastic Load Balancing
ちなみに API Gateway は 2018 年 11 月に Multi Value Headers に対応している see: Support for multi-value parameters in Amazon API Gateway | AWS Compute Blog
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです