CDK(Python)でAPIGatewayの統合レスポンスなLambdaを作る
もくじ
cdkを使ってAPIGatewayを作ってみます。
Lambdaは統合レスポンスで行きます👍
全体の構成はこんな感じです。
前提
cdkのシリーズの続き。
では 作っていきましょう👻
requirements.txt
今回使うリソースはLambdaとAPI Gatewayなので、必要なモジュールはこんな感じです👍
aws-cdk.core==1.72.0
aws-cdk.aws-lambda==1.72.0
aws-cdk.aws_apigateway==1.72.0
stackファイルの実装
ここがメインですが、説明文よりサンプルコードのほうがきっとわかりやすいと思います。
内容しては、Lambdaを1つ作って、API Gatewayからhogeというリソースを1つ生やし、そこのGETメソッドに統合レスポンスでLambdaを設定してます👍
from aws_cdk import aws_apigateway, aws_lambda, core
class ApiLambdaIntegrationStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# lambda
lambda_ = aws_lambda.Function(
self,
"ApiLambdaIntegrationLambda",
code=aws_lambda.Code.asset("lambdas/api_lambda_integration"),
runtime=aws_lambda.Runtime.PYTHON_3_8,
handler="lambda_function.lambda_handler",
)
# API Gateway
api = aws_apigateway.RestApi(self, "ApiLambdaIntegrationApiGateway")
hoge_resources = api.root.add_resource("hoge")
hoge_resources.add_method("GET", aws_apigateway.LambdaIntegration(lambda_))
lambdaの実装
Lambdaの実装はおまけです。
今回はeventの入力を完全に無視したLambdaですが、その理由としては今回は統合レスポンスなのでlambdaのレスポンスが固定になります。そこを強調するためにこんな実装にしてみました😊
def lambda_handler(event, context):
return {
"statusCode": 200,
"headers": {
"Content-Disposition": 'attachment;filename="hoge.txt"',
"Content-Type": "text/plain",
},
"body": "hogehogeなのだよ",
}
Lambdaのレスポンスの詳細は公式をご確認ください👍
エントリーポイントに追加
下記な感じで追記します
...省略...
from stacks.api_lambda_integration import ApiLambdaIntegrationStack
...省略...
ApiLambdaIntegrationStack(app, "api-lambda-integration-stack", env=env)
...省略...
動作確認
コンソールなりから今回deployしたAPIのエントリーポイントを取得してきてください😉
ちなみにcli経由で取得しようとすると結構たいへんなのでコンソールから取得したほうが早いです。
CLIの場合はこんな感じ❓🤔
# APIの一覧を取得して、そこから今回deployしたAPIのidを取得
$ aws apigateway get-rest-apis
...APIの一覧が表示されるので頑張って探す...
# 可読性向上のために変数に入力。下記のIDは例
$ API_ID=cggnai5wi8
# どこかからリージョンを取得してきてください😰
$ REGION=ap-northeast-1
# URI合成
$ URI=`echo https://$API_ID.execute-api.$REGION.amazonaws.com/prod/hoge`
$ echo $URI
https://cggnai5wi8.execute-api.ap-northeast-1.amazonaws.com/prod/hoge
はい、色々イケてないですね😅
# curlで動作確認
$ curl $URI
hogehogeなのだよ
ブラウザで叩くとこんな感じです👍
以上👍
stackの削除
$ cdk destroy --all
まとめ
今回はCDKを使ってAPI Gatewayの統合レスポンスを使うLambdaをデプロイしてみました👍
ブラウザとcurlで動作確認をしてました