kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

Serverless Frameworkコマンドでlambdaにリリース

awsのlambdaを便利に使いたいため、Serverless Frameworkを試してみました。

www.serverless.com

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」エラー

macapple siliconで実行していたのが影響。

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で管理しているものがそのままアップできるのはいいですね。