複数値を持つ 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

About

ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです

Copyright © 53ningen.com