🥺

AWS LambdaでCORSが効かないとき

1 min read

どんなに検索しても「CORSの設定で Access-Control-Allow-Origin を * にしようね!」みたいな当たり前の結果しか出てこなくて苛立っているあなたに捧げます

前提条件

  • AWS Lambda
  • AWS API Gateway (HTTP API)
  • 下図
    デザイナー

TL; DR

API Gateway にOPTIONSのルートを追加して、
route
Lambda がOPTIONSのリクエストに対して空の成功レスポンスを返すようにハンドラを定義します
下図は Node.js の例です
code

苦難

使おうとしていた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 を * にしようね!」って言われて、
CORSの設定画面
してんだよ💢 って思ったり、
仕方ないからログに従ってIAMを作って設定してみたけどダメ、ヘッダの設定をいろいろ変えてみたりしたけどダメでした

CORSは設定すればAPI GatewayがよしなにやってくれるはずなのにPreflightもLambdaに届いてしまうらしくて、OPTIONSのルートを追加して、ハンドラにもOPTIONSのリクエストに対して空の成功レスポンスを返すように変更したら正常に動きました

もっと賢い解決方法あるんでしょうか?

愚痴

なんかみんな REST API の方ばっかり使ってるみたいで、この HTTP API ってやつの情報が全然ないんですよね
登場はそんなに最近ってわけでもないと思うんですが…
HTTP APIの作成画面