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、おすすめです。