awsのlambdaを便利に使いたいため、Serverless Frameworkを試してみました。
install
npm install -g serverless
プロジェクト作成
sls create --template aws-go-mod --path project
実行できるか確認
cd project make build
エラー
go: github.com/aws/aws-lambda-go@v1.6.0: missing go.sum entry; to add it: go mod download github.com/aws/aws-lambda-go
go.sumがつくられないため、エラーがでたため作成
go mod tidy
再度build
make build
実行結果
chmod u+x gomod.sh ./gomod.sh export GO111MODULE=on env GOARCH=amd64 GOOS=linux go build -ldflags="-s -w" -o bin/hello hello/main.go env GOARCH=amd64 GOOS=linux go build -ldflags="-s -w" -o bin/world world/main.go
binフォルダができたので、コンパイル完成
serverless.yml
configを変更(stage とregionのコメントアウトを外す)
# stage: dev # region: ap-northeast-1 ↓ stage: dev region: ap-northeast-1
必要があればfunctionsの内容を修正
deploy
awsのprofileを作成していることが前提
deployコマンド
make deploy
成功した場合、lambdaに関数が作成されます。
functionのevents設定で行った動作で動くようになったと思います。
この状態で実行 エラー発生
fork/exec /var/task/main: exec format error
「fork/exec /var/task/main: exec format error」エラー
buildコマンドに「 GOARCH=amd64」を追加
build: env GOARCH=amd64 GOOS=linux go build -ldflags="-s -w" -o bin/check check/main.go
build設定を変更し、再度deploy
再度実行し、問題なく動作することを確認
まとめ
Makefileでmakeだけでできるのは便利ですね。
lambda関数は結構作ったものがわすれがちになるので、gitで管理しているものがそのままアップできるのはいいですね。