LoginSignup
0
0

More than 3 years have passed since last update.

Serverless Frameworkでcorsを有効にした時にハマったこと

Posted at

背景

あるサイトの開発をした際にいくつかのAPIをServerlessFrameworkとAWS Lambdaの組み合わせで作った際にに、バイナリメディアを返すAPIを追加すると今まで動いていたAPI含め動かなくなったのでその時の問題点を記載していく。

問題

ServerlessFrameworkでは以下の形で簡単にCORSの対応をすることができる。

functions:
  sample:
    handler: handler.sample
    events:
      - http:
          path: sample
          method: get
          cors: true

この形でcorsの対応を行うと、ServerlessFramework側でAPI Gatewayのモックサーバ設定を使ってOPTIONSリクエストを処理する部分を自動で作ってくれる。
通常JSONを返すようなAPIであれば特に問題は発生しないが、バイナリメディアを返すようなAPIを絡ませるとOPTIONSリクエストが全て失敗してしまうようになる。

原因

バイナリメディアを返すためにはAPI GatewayのBinary Media Typeを設定する必要がある。
今回返したいバイナリメディアはPDFだったため、正常にレスポンスを返すためには「*/*」を設定する必要がある。
しかし、これを設定すると全てのメディアタイプをバイナリメディアとして対応しようとしてしまうため、自動的に設定されるモックサーバではバイナリペイロードを処理できずにOPTIONSリクエストで失敗する状態が発生してしまう。

解決策

自前でCORS対応をする。

この時はServerlessFrameworkでCORSを有効化することを諦めて自前でCORS対応をするようにした。
モックサーバの設定をいじって処理できるようにするとよかったのだがドキュメントを見る限りではその設定を見つけることはできなかった。(無いよね??)

参考URL

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0