Serverless Frameworkで作ったAPIにCORSの設定を入れる
前回の Serverless FrameworkとFlaskでWeb APIを作りかけたの続き。
前回の時点でAPIはできていて、これを別のURLから叩けるようにするためにCORSの設定を入れる。
設定を入れるのは以下
- Serverless Frameworkの設定側 (実際はAPI Gateway)
- Lambdaアプリケーション側
Serverless Framework側で設定を追加する
events の下で細かく設定はできるみたいだけど、 cors の設定を入れるのが一番シンプルみたい。
functions:
app:
handler: wsgi_handler.handler
:
events:
- http: ANY /
- http:
path: '/{proxy+}'
method: ANY
cors: true
参考: Serverless FrameworkでCORS有効化したAPI Gatewayの作成 – サーバーワークスエンジニアブログ
設定できると、AWS ConsoleでAPI Gatewayの設定にOPTIONSの項目が追加される。
Lambdaアプリケーション側にも追加する
レスポンスのヘッダーにパラメーターを追加する。
前回はPythonでFlaskを使っていたので今回もそれ前提。
from flask import jsonify
def hello():
:
response_body = {
"message": "Hello World"
}
response = jsonify(response_body)
response.headers["Access-Control-Allow-Origin"] = "*"
return response, 200
前回は辞書を jsonify()
を通して返していた。
ここでheaderメソッドで Access-Control-Allow-Origin
パラメーターを付与してそれを返すようにすることで、headerに情報を載せることができた。
追記:
Response クラスで設定するか make_response()
で設定するのが正しい方法みたい。
最初Serverless Framework側のみの設定でできなくてハマったんだけどなんとかできてよかった。