AWS CDK で Lambda 関数を作成する際に golang 使う方法メモ
# setup
mkdir my-project && cd my-project
cdk init app --language typescript
# first build
npm run build
cdk ls
npm install @aws-cdk/aws-lambda
lib/my-project-stack.ts
に Lambda 関数の定義を追加
import * as cdk from '@aws-cdk/core' ;
import * as lambda from '@aws-cdk/aws-lambda' ;
export class MyProjectStack extends cdk . Stack {
constructor ( scope : cdk . Construct , id : string , props ?: cdk . StackProps ) {
super ( scope , id , props ) ;
const hello = new lamdba . Function ( this , 'HelloHandler' , {
runtime : lamdba . Runtime . GO_1_X ,
code : lamdba . Code . fromAsset ( 'lambda/bin' ) ,
handler : 'main'
} )
}
}
ビルドしたバイナリを配置するディレクトリと、 golang のコード書くファイルを作成
mkdir -p lambda/bin
touch lambda/main.go
Go Modules で依存関係を管理するので go mod init
しておく
go mod init example.com/my-project
npm run build
で golang もビルドしたいので、 package.json
を修正
build
した時に lambda ディレクトリに移動して、 golang をビルドするコマンドを設定
...
"scripts" : {
"build" : " tsc; cd lambda; GOOS=linux go build -o bin/main" ,
"watch" : " tsc -w" ,
"test" : " jest" ,
"cdk" : " cdk"
},
...
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
type Response struct {
Message string `json:"message"`
}
func Handler () (Response , error ) {
return Response {
Message : "Hello World" ,
}, nil
}
func main () {
lambda .Start (Handler )
}
実装した Lambda 関数を AWS SAM CLI でローカル起動
cdk synth --no-staging > template.yaml
sam local invoke HelloHandlerXXXXXXXX --no-event
% cdk --version
s1.59.0 (build 1d082f4)
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G6020