状況
- AWSのcloudfrontを利用している。
- API GatewayとLambdaを利用してweb APIサービスを構築している。
- postメソッドをクエリパラメータで利用している。
発生したトラブル
- クエリパラメータ(URLの後ろに?で繋げる文字列)を利用してPOSTメソッドでLambda関数を実行したときに、querystringにクエリパラメータの値が入るはずなのに入っていない。
- 代替ドメイン名、ディストリビューションドメイン名のurlでpostするときのみ、querystringにクエリパラメータの値が入らないという状況。
原因
- cloudfrontの
ビヘイビア
の設定のキャッシュキーとオリジンリクエスト
の設定がされていなかったので、クエリパラメータが取得されなかった。
解決方法
キャッシュキーとオリジンリクエスト
で、Legacy cache settings
を選択して、クエリ文字列をすべて
に変更して、保存すると解決します。
- 少し待ってから、再度swaggerやcurlでpostメソッドを実行後、cloudWatchでログイベントを確認すれば、querystringに値が入っていることが確認できます。(但し、lambdaのコードの中で
print(event)
等をしていること)
あとがき
- かなりニッチなトラブルです。
- ボディリクエストのpostは問題ないのに、クエリパラメータのpostのみ影響が出るので、注意して下さい。