勉強がてら触っていた際のメモです。
slsのインストール
npm install serverless -g
goのテンプレート作成
sls create -u https://github.com/serverless/serverless-golang/ -p go-hatena
go modulesの初期化
go mod init go-hatena
必要なパッケージのインストール
go get github.com/aws/aws-lambda-go/lambda
serverless.ymlの編集
以下のような感じで.aws/credentialsを仕事用、プライベート用で分けている。
$ vim ~/.aws/credentials
[default]
aws_access_key_id = hoge
aws_secret_access_key = huga
cloudfront=true
[private]
aws_access_key_id = hogehoge
aws_secret_access_key = hugahuga
今回、lambdaのデプロイはprivate用の方で行いたい。
なのでserverless.ymlにその設定を書いていく。
service: go-hatena
provider:
name: aws
runtime: go1.x
stage: ${opt:stage, self:custom.defaultStage}
#profileオプション追加
profile: ${opt:profile, self:custom.defaultProfile}
#regionオプション追加
region: ${opt:region, self:custom.defaultRegion}
custom:
defaultStage: dev
#何も指定がなければ private profile
defaultProfile: private
#何も指定がなければ 東京リージョン
defaultRegion: ap-northeast-1
package:
exclude:
- ./**
include:
- ./bin/**
functions:
hello:
handler: bin/main
また、awsのアカウントを指定してデプロイを行う別の方法として、--aws-profileオプションを使う方法もあるぽい。参考
serverless deploy --aws-profile private
Makefileの作成
Makefileという名前でファイルを作成し、ビルドとデプロイのコマンドを記載
build:
GOOS=linux go build -o bin/main
deploy:
sls deploy
ビルド、デプロイ
make build
make deploy
これでawsのlambdaを見に行けば関数がデプロイされている。

実行
Makefileに以下を追加し、
run:
sls invoke -f hello
実行。レスポンスが返ってくる。
$ make run
sls invoke -f hello
{
"message": "Go Serverless v1.0! Your function executed successfully!"
}
$
作成した関数を定期実行させる
serverless.ymlにscheduleを追記
functions:
hello:
handler: bin/main
events:
- schedule: cron(0/1 * * * ? *)
定期実行されていることはcloudWatchLogsから確認できる。わかりやすくするために「hello!!」とログ表示させるようにする。
func Handler() (Response, error) {
fmt.Println("hello!!") // 追記
return Response{
Message: "Go Serverless v1.0! Your function executed successfully!",
}, nil
}
ビルドし、デプロイ
make build
make deploy
定期実行されていることの確認
hello!!と定期的に表示されている。

cloudWatchLogsの保存期間を設定
デフォルトでslsではCloudWatch Logsの保存期間は無期限らしい。
個人アカウントの場合、課金されても嫌なので、保存期間を設定する。
serverless.ymlを修正
provider:
logRetentionInDays: 1 #追加
また、このlogRetentionInDaysに指定できる日数は決まってる
[1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653]
上記以外の日数を指定するとデプロイで怒られる
Invalid retention value. Valid values are: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653] (Service: AWSLogs; Status Code: 400; Error Code: InvalidParameterException; Request ID: 8aca73dc-43a1-11e9-a81a-6bf91d5376af).
lambdaのバージョン管理をしない
デフォルトでslsはデプロイした全てのバージョンのlambdaを保存するらしい。
今回お遊びで触っているだけなので、バージョン管理をしないように設定。
provider:
versionFunctions: false #追加
定期実行を止める
lambdaの管理コンソール上からCloudWatchEventsの有効/無効が切り替えれる。
無効にし、保存すれば定期実行は止まる

参考
https://qiita.com/imura81gt/items/5cf490468f95ce3d100b
https://tikasan.hatenablog.com/entry/2018/06/27/083316
https://dev.classmethod.jp/etc/serverless-framework-lambda-cron-execute/
https://tech.ga-tech.co.jp/entry/2018/12/12/120000