2017年7月27日木曜日

LambdaをAPI Gatewayを通してパブリックなAPIにしたのに、no-access-control-originが出るときにはここを見ましょう的なお話

  • このエントリーをはてなブックマークに追加

Webサービスなりを作っていると、メール送信の実装とか面倒だなぁと思うことが多々ある。
それにフロントエンドでごにょごにょやりましょうということも最近は目立ってきてるし、
サーバレスアーキテクチャだとかなんだとかっていうこともあるので、
お問い合わせだとかそういう簡単なものはLambda使ってAPI Gatewayに逃してあげると簡単だったりする。

けどAPIとしてはちゃんと叩けるしお問い合わせがslackに届いてるはずなんだけどno-access-control-originが出てしまう。
なので今日はそれを解決するにはをば。

ちなみにお問い合わせは最近はメールで送らないでslackに飛ばすようにしてる。
それをLambdaで実装するのはこちらのリポジトリに載せてあるので参考にでも。
watanabeyu/contact-to-slack

で、ちゃんと設定したはずなのにどうしてno-access-control-originが出てしまうのか?
自分がAPIを作ったのは下記の手順。
1:Lambad関数を作成
2:Lamba関数のトリガーからAPI Gatewayのトリガーを設定
3:出来上がったメソッドのCORSを有効にする
4:APIをプロダクションに引き上げる

で、過去に作ったものとかと色々と比べてみたところ、
POSTメソッドの統合レスポンス内のヘッダーマッピングのAccess-Control-Allow-Originが空になっていた

ちなみにOPTIONSの方は問題なくAccess-Control-Allow-Originは'*'となっていた。
多分何か設定ミスしたのかなんなのかがよくわからないけど、
これのせいでAPI叩いてslackには届くんだけど、エラーが出るという問題が生じていたみたい。

ってな感じでAPI Gatewayを使うのはいいんだけど細かいところを設定しないとエラーが出てしまうので要注意的なみたいな。

Adsense