Api GatewayとLambda関数でクッキーを設定するときの注意点

AWS

いや、マジで悩みました。Codeがおかしいのかと延々悩んで。

でも、Api Gatewayの設定でした。Set-Cookieを設定しなければならない。以下の図をみてください。メソッドレスポンスのレスポンスヘッダーに以下の2つを設定。

次に統合レスポンスにヘッダーのマッピングとマッピングテンプレートを。

method.response.header.Access-Control-Allow-Origin  '*'
method.response.header.Set-Cookie  integration.response.body.headers.Set-Cookie
#set($inputRoot = $input.path('$.body'))
$inputRoot

これで、Cookieがブラウザに格納されるはずです。もちろん、レスポンスCodeをLambda関数書かないといけないですが。

さて、Cookieのキーが同じ値ならば、という条件を付けたいのですが、デフォルトだとLambda関数のeventが空なのでうまくいかなかったです。

その場合ヘッダーを付けましょう。

統合リクエストのマッピングテンプレートに、

#set($cookieHeader = $input.params().header.get('Cookie'))
{
  "cookies": "$cookieHeader"
}

といれます。これサンプルなので、後で修正する羽目になりました。実際に使用するときはAIチャットに相談してください。

あと、気をつけるのは、統合リクエストに権限付けるの忘れないように。あれ、新コンソールだと見当たらないな? 旧コンソールだとあるのに。

追記です

私はAPI-Gatewayとlambda関数は1対1で繋がっていると思っていて、クッキーがAPI-Gatewayのドメインごとに分かれてしまう現象に悩んでました。

lambda別々に作って、クッキー設置したり、取り出したりしますよね。これができないのは困る。

ヘッダーが悪いのか、コードが悪いのか、色々悩んでカスタムドメインをやろうとしてふと気づきました。

「リソース」使えばいいじゃね?

こうすれば、各リソースにlambda関数結びつけて、同じドメインで扱えます。

ちょっと備忘録でした。

コメント

タイトルとURLをコピーしました