🥺
AWS LambdaでCORSが効かないとき
どんなに検索しても「CORSの設定で Access-Control-Allow-Origin を * にしようね!」みたいな当たり前の結果しか出てこなくて苛立っているあなたに捧げます
前提条件
- AWS Lambda
- AWS API Gateway (HTTP API)
- 下図
TL; DR
API Gateway にOPTIONS
のルートを追加して、
Lambda がOPTIONS
のリクエストに対して空の成功レスポンスを返すようにハンドラを定義します
下図は Node.js の例です
苦難
使おうとしていたWebアプリからLambdaのエンドポイントを叩いてもCORSで怒られてしまい、
ログを見ても釈然としないし、
"OPTIONS $default HTTP/1.1" 500 35 ~~~~~= The IAM role configured on the integration or API Gateway doesn't have permissions to call the integration. Check the permissions and try again.
ググってみても「CORSの設定で Access-Control-Allow-Origin を * にしようね!」って言われて、
してんだよ💢 って思ったり、
仕方ないからログに従ってIAMを作って設定してみたけどダメ、ヘッダの設定をいろいろ変えてみたりしたけどダメでした
CORSは設定すればAPI GatewayがよしなにやってくれるはずなのにPreflightもLambdaに届いてしまうらしくて、OPTIONS
のルートを追加して、ハンドラにもOPTIONS
のリクエストに対して空の成功レスポンスを返すように変更したら正常に動きました
もっと賢い解決方法あるんでしょうか?
愚痴
なんかみんな REST API の方ばっかり使ってるみたいで、この HTTP API ってやつの情報が全然ないんですよね
登場はそんなに最近ってわけでもないと思うんですが…
Discussion