CORS(Cross-Origin Resource Sharing)問題は、ローカルで開発してるときにサーバで動いているAPIを叩こうとしたときに、Chrome等のWebブラウザでエラーになり怒られます。
この対処をすることで、ローカルでもAPIを叩くことが出来るので、
AWSのコンソールでポチポチせずに、CORS対応したかったのですが、中々ハマったのでメモ。
(実際には、CloudFrontの設定が必要なので、0ポチは無理でしたorz)
環境
- Serverless framework 1.20.2
Express側ですること
serverless.yml
を以下のように編集します。
# serverless.yml
functions:
app:
handler:index.handler
events:
- http:
path: /{proxy+}
method: any
cors: true
cors 対応するだけなら、trueに指定するだけなのですが、 express-on-serverless
を使いたかったがために、methodの設定に苦しみました。
ちなみに、 express-on-serverless
の デフォルトの書き方だと、下記のようになっており、 http: any {proxy+}
をどうにか別の書き方で書きつつ、 cors: true
をしようとすると上記のようになります。
# serverless.yml
functions:
app:
handler:index.handler
events:
http: any {proxy+}
CloudFrontですること
もし、API GatewayをCloudFront通さずに利用しているのであれば、この作業は不要です。
ここだけAWSのコンソールをいじります((泣)
API GatewayのBehaviorで Origin
ヘッダーだけ通します。
以上で設定は終了です!
まとめ
- Serverlessでcors対応するなら、 cors: trueをするだけ
- express-on-serverlessを使うなら、1工夫しましょう
- CloudFrontを通してApi Gatewayを利用するなら、Originヘッダーを通しましょう。
以上です。ここまで、読んでくださりありがとうございました。