AWS CDKでTypeScriptで書かれたLambdaにLambda ProxyなREST APIを追加する
API定義から実装まで全部TypeScriptでやっちゃおうというやつです。 Serverless FWやAWS SAMなどでは、TypeScriptをビルドするためのツール・プラグインなどを追加する必要がありました。 […]
広告ここから
広告ここまで
目次
API定義から実装まで全部TypeScriptでやっちゃおうというやつです。
Serverless FWやAWS SAMなどでは、TypeScriptをビルドするためのツール・プラグインなどを追加する必要がありました。
が、AWS CDKを使えばwebpack.config.jsなどを書かずにTypeScriptで実装できます。
Lambda関数を作成する
1: Setup project
$ mkdir ts-api
$ cd ts-api
$ npx aws-cdk init app --language typescript
2: ライブラリを追加
$ yarn add @aws-cdk/aws-lambda-nodejs
$ yarn add -D @types/aws-lambda
3: TypeScriptでLambdaのコードを書く
$ vim lambda/entry.ts
import {
APIGatewayProxyHandler
} from 'aws-lambda'
export const handler: APIGatewayProxyHandler = async (event) => {
console.log(event)
return {
statusCode: 200,
body: JSON.stringify(event)
}
}
4: AWSリソースを定義する
$ vim lib/ts-api-stack.ts
import * as cdk from '@aws-cdk/core';
import { NodejsFunction } from '@aws-cdk/aws-lambda-nodejs'
export class DeployToS3Stack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const lambdaFunction = new NodejsFunction(this, 'LambdaFunction', {
entry: 'lambda/entry.ts',
handler: 'handler',
})
}
}
5: deploy
$ yarn build
$ yarn cdk bootstrap
$ yarn cdk deploy
REST API endpoint (Lambda proxy)を追加する
AWS API Gatewayとの連携もかなり簡単です。
1: Install a construct library
$ yarn add @aws-cdk/aws-apigateway
2: Define AWS resource
import * as cdk from '@aws-cdk/core';
import { LambdaRestApi } from '@aws-cdk/aws-apigateway';
import { NodejsFunction } from '@aws-cdk/aws-lambda-nodejs'
export class DeployToS3Stack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const lambdaFunction = new NodejsFunction(this, 'Function', {
entry: 'lambda/entry.ts',
handler: 'handler'
})
const api = new LambdaRestApi(this, 'API', {
handler: lambdaFunction,
proxy: true,
})
}
}
これでLambda ProxyなREST APIをALL TypeSciprtで実装・デプロイできるようになりました。