Loading...

ALB のターゲットの Lambda 関数から Multi Value Headers を返す

2019/02/26 16:20
2024/12/30 17:54
複数値を持つ 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"]
  }
}

おまけ

ちなみに API Gateway は 2018 年 11 月に Multi Value Headers に対応している see: Support for multi-value parameters in Amazon API Gateway | AWS Compute Blog