AWS CDKを使ってAWS LambdaにAPI Gateway経由で呼び出す口を用意する
Lambdaを使ってAPIをホストしたい時、何使いますか? AWS CDK、おすすめです。
実際のコード
Lambda Functionを中心として、Lambda Functionに関連付けを紐付けるだけで API Gatewayなりのリソースが作成される。
#!/usr/bin/env node import 'source-map-support/register'; import {App, Stack} from '@aws-cdk/core'; import {Runtime, Code, Function} from "@aws-cdk/aws-lambda" import {ApiEventSource} from "@aws-cdk/aws-lambda-event-sources" const app = new App(); const stack = new Stack(app, "example-stack") const f = new Function(stack, "example-lambda", { handler: "main", code: Code.fromAsset("dist/"), runtime: Runtime.GO_1_X, role: role, }) f.addEventSource(new ApiEventSource("POST", "/"))
Lambda中心でHookを追加出来るのは、Serverless FrameworkやAWS SAMと似たような形になっていて良い。
最初、AWS SAMを cdk 経由で使おうと思って調べていたら
aws-sam というそのままのモジュールがあったが
これは low-level constructs
という感じで、CloudformationのSAMそのもの。
使おうとしても、警告出るし、使いづらかった。(Public Betaなので仕方ない気もしますが・・・)
そこで、色々調べてたら @aws-cdk/aws-lambda-event-sources
というパッケージがあったので
使ってみたらめっちゃ便利だったので、記事を書いた。
現状、@aws-cdk/aws-lambda-event-sources で対応しているリソースについて
現状、ApiEventSource(API Gateway)の他にも下のようなリソースと連携する事ができる。
上記リソースに関しては、ドキュメントが整備されている。 ApiEventSourceだけはドキュメントに記載がないので注意。
まとめ
AWS CDK、便利。VSCodeでTypeScript書くと、import補完もしてくれていいぞ! というわけで、AWS CDK、おすすめです。