目次
背景
Chalice(+CI/CDパイプライン)を利用したAPI開発において、APIGatewayやLambdaに対する追加設定で chalice の configファイルが対応していない点があります。
個人的に遭遇した物で例えば、EFSマウント や APIGatewayのログ出力設定、カスタムレスポンス等です。
今回は前回 (EFSマウント) に引き続き、一部レスポンスをAPIGatewayのMockレスポンスを返したいという要望があり実現してみました。
(相当数のリクエストが想定されるため、Lambdaを通さずに直接レスポンスを返却したい)
前回記事はこちら
AWS Chalice の AWS CloudFormation Support
https://aws.github.io/chalice/topics/cfn.html
実装
/status エンドポイントにGETメソッドでアクセスした際に、レスポンスコード: 200、{"status": "OK"} を返却する MergeTemplateが下記のような形となります。
当然ですが下記のような動作のため、Chaliceにて既に /status へのRouteを作成していると今回のテンプレートに上書きされてしまうので要注意です。
Chalice → SAMTemplate ← 本TemplateをMerge
また、"title": "APIGateway-ResourceName"の宣言を抜くとCloudFormtationデプロイエラーとなるため
Chaliceのapp_nameを2重管理せざるを得ない形となっています。(最終的に 下記 DefinitionBody.title の名前で上書きされてしまう)
extras.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
{ "Resources" : { "RestAPI" : { "Properties": { "DefinitionBody": { "swagger": "2.0", "info": { "title": "APIGateway-ResourceName" }, "paths": { "/status": { "get": { "responses": { "200": { "description": "OK" }, "503": { "description": "Maintenance" } }, "x-amazon-apigateway-integration": { "type": "mock", "httpMethod": "GET", "requestTemplates": { "application/json": "{\"statusCode\": 200}" }, "responses": { "200": { "statusCode": "200", "responseTemplates": { "application/json": "{\"status\": \"OK\"}" } }, "503": { "statusCode": "503", "responseTemplates": { "application/json": "{\"status\": \"Maintenance\"}" } } } } } } } } } } } } |
作成されたリソース
/status リソースが作成され、GETメソッドがMock統合されている状態となりました。
レスポンス切り替え
一時対応等、手動の場合は /status リソースのGETメソッドの統合リクエスト設定中のマッピングテンプレートのレスポンスコードを変更後、APIをデプロイする事でレスポンスが下記のように変化します。
※APIデプロイ後、20秒程待つ必要あり
1 2 3 4 5 6 |
% curl https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/status {"status": "OK"} マッピングテンプレート切り替え後 % curl https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/status {"status": "Maintenance"} |
まとめ
利用頻度は少ないかもしれませんが、高頻度でアクセスされるエンドポイントの場合Lambda起動を抑える事ができるという点で有用かもしれません。
また、本題とはそれますが、マージ用のSAM Templateを生成系AIに作成してもらい調整した事で調査時間を大きく削減できました。
Bedrock (Anthropic Claude3シリーズ) レスポンス爆☆速でお勧めです。