gumi TS&D という部署のクラウドエンジニア担当です.
(12/1 当日に Calendar 作って, 当日夕方書きました)
ご存知の通り簡単な API であれば API Gateway は最適です.
構築も AWS マネージメントコンソールからドキュメント見ながらぽちぽちしていくだけなのでとても楽かと思います.
しかし, ぽちぽち構築は自動化の妨げになるので, クラウドエンジニアとしてはコード化しないといけません.
今回簡単な API を API Gateway で作る機会があり, クエリパラメータの扱いで混乱したので紹介します.
(ちなみに作成した API)
今回作った API は, POST したファイルを S3 の指定したパスに保存するものです.
混乱箇所
CloudFormation の Template(抜粋) は以下のようになります.
ApiGateway:
Type: "AWS::ApiGateway::Method"
Properties:
RequestParameters:"method.request.querystring.objectPath": true
Integration:
RequestParameters:
"integration.request.path.objectPath": "method.request.querystring.objectPath"
Uri: !Sub "arn:aws:apigateway:ap-northeast-1:s3:path/sample_bucket/{objectPath}"
...
- 「RequestParameters」に受け付ける URL クエリパラメータの設定
- 「Integration.RequestParameters」で変数にマッピング
この二つの設定が必要.
私は「RequestParameters」で混乱した.
Properties 直下の「RequestParameters」は「メソッドリクエスト」の URL パスパラメータの設定.
マネージメントコンソールだと下の SS の通り.
「Integration.RequestParameters」は「統合リクエスト」の URL パスパラメータの設定.
マネージメントコンソールだと下の SS の通り.
さらに「Integration.RequestParameters」に関しては, マネージメントコンソールと同じようにパラメータ名だけの指定ではダメで以下のように指定しなければならない.
integration.request.<location>.<name>