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ヘッダーを通しましょう。
 
以上です。ここまで、読んでくださりありがとうございました。