API Gateway+LambdaでヘッダにSet-Cookieを複数設定する方法
CloudFrontの署名付きCookieを使用しようとしたのですが、3つSet-Cookieを設定する必要があります。
ところが、API GatewayはSet-Cookieを複数設定することをサポートしていないようです。Discussion Forums
ここで抜け道を探しました。https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
API Gatewayのヘッダーは大文字小文字が区別される
API Gatewayのヘッダは大文字小文字が区別されます。
なので、以下は全て別のヘッダとなります。
Set-Cookie SET-CookiE SeT-CookIe
これでLambdaで設定してみます。簡単にするためにLambdaプロキシの統合にチェックを入れています。
Lambdaのindex.jsです。(ハンドラ:index.handler)
exports.handler = async (event) => { const response = { statusCode: 200, headers: { 'Content-Type': 'application/json; charset=utf-8', 'Set-Cookie': 'CloudFront-Expires=xxxx', // 複数指定 'Set-CookiE': 'CloudFront-Signature=yyyy', // 複数指定 'Set-CookIe': 'CloudFront-Key-Pair-Id=zzzz' // 複数指定 }, body: JSON.stringify('test'), }; return response; };
API Gateway + Lambdaの構成でデプロイします。
ヘッダ情報の確認方法
ChromeのNetworkタブで確認できます。
これでAPI Gateway + Lambdaで署名してもらって、CloudFrontに署名付きCookieでアクセスすることが可能です。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級,宅建士
コメント