CDK(Python)でAPI Gatewayの統合レスポンスでURLパラメータの設定とステージ名を変える
前回API GatewayをCDKで実装しました。
が、設定皆無だったので今回はそこにクエリ文字列(URLパラメータ)を設定したり、ステージ名変更したりしようと思います。
のまえに、そもそも クエリ文字列(URLパラメータ) ってなんぞや?って問題があるので先に軽くふれます。
GET
とかでURLからパラメータを渡すあれです。
具体的には
https://blog.i-tale.jp/?hoge=123&hugo=456&moke=mokemoke
のこの部分(↓)
?hoge=123&hugo=456&moke=mokemoke
エンドポイントの後に?
がありその後&
で連結したパラメーターのことです。
前提
前回の続き
では 作っていきましょう👻
変更があるところだけ大まかに書いていきます。
stackファイル
いつものとおりメインはここですが、ほぼサンプルコードで😅
...省略...
class ApiLambdaIntegrationStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
...省略...
# lambda
lambda_ = aws_lambda.Function(...省略...)
# API Gateway
api = aws_apigateway.RestApi(
# ステージ名を設定
self, "ApiLambdaIntegrationApiGateway", deploy_options=aws_apigateway.StageOptions(stage_name="hogehoge")
)
hoge_resources = api.root.add_resource("hoge")
hoge_resources.add_method(
"GET",
aws_apigateway.LambdaIntegration(lambda_),
request_parameters={
# クエリ文字列(URLパラメータ)の明示的に宣言
"method.request.querystring.hoge": True, # 必須なパラメータ
"method.request.querystring.hogeOption": False, # 必須ではないパラメータ
},
# 下記設定を入れないと必須フラグは動作しない
request_validator=api.add_request_validator(
"ApiLambdaIntegrationValidator", validate_request_parameters=True
),
)
Lambda
動作確認のためのおまけです。
クエリ文字列を取得してそれをレスポンスで返す、というLambdaです。
def lambda_handler(event, context):
query = event["queryStringParameters"]
return {
"statusCode": 200,
"body": f'hoge={query["hoge"]}, hogeOption={query.get("hogeOption")}',
}
余談ですが、query["hoge"]
とquery.get("hogeOption")
で微妙に書き方を変えているのはkey
が絶対あるか無いかの差です👍
デプロイ🚀
$ cdk deploy api-lambda-integration-stack
デプロイ完了時にエンドポイントが表示されるのでそれをコピーしておいてください(笑)
動作確認
デプロイ時に表示されたURLを使います。
今回はこんなものが表示されました。
https://ydb42khx4b.execute-api.ap-northeast-1.amazonaws.com/hogehoge/
エンドポイントの末尾がステージ名で設定した値(hogehoge
)になっていることがとりあえず確認できました👍
さてとりあえず一旦、可読性向上のために変数に入れます。
$ URL=https://ydb42khx4b.execute-api.ap-northeast-1.amazonaws.com/hogehoge/
ではAPIの動作確認をしていきましょう
$ curl -i ${URL}hoge
HTTP/2 400
...省略...
{"message": "Missing required request parameters: [hoge]"}
「hoge
無ぇぞヽ(゚Д゚)ノゴルァァア!」とお壊れました👍
必須フラグが働いてますねー。
ということでhoge
を渡してみます。
$ curl -i "${URL}hoge?hoge=123"
HTTP/2 200
...省略...
hoge=123, hogeOption=None
無事期待通りのレスポンスが返ってきました👍
hogeOption
は任意なので、なくてもレスポンスは通ります👍
一応hogeOption
も渡してみます
$ curl -i "${URL}hoge?hoge=123&hogeOption=hugohugo"
HTTP/2 200
...省略...
hoge=123, hogeOption=hugohugo
はい、期待通りのふるまいですね
確認終了です。
余談ですが、hogehoge使いすぎるのもちょっと問題だなと思いました、、、
今回のエンドポイントの末尾がhogehogeしすぎてて、どこで設定したhogeがどのhogeに対応しているのか直感的にわかりにくい、、
エンドポイントの末尾、、、https://xxxxxxx/hogehoge/hoge?hoge=xxx
削除💣
$ cdk destroy api-lambda-integration-stack
まとめ
以前にAPI GatewayでデプロイしたStackにクエリ文字列とステージ名を追加してみました🎉イェーイ