🫐
lambrollでgo1.xからprovided.al2ランタイムに移行する
AWS LambdaのGoのランタイムでgo1.xの終了が2023年12月31日になると告知がありました。
今後はprovided.al2を使用する必要があります。
とはいえGoのコードの変更は特になく、lambrollでデプロイしている場合は2-3行の変更とデプロイで終了することがほとんどだと思います。
- ランタイムをprovided.al2に変更する
- バイナリ名をbootstrapに変更する
-
github.com/aws/aws-lambda-go/lambda
がv1.18.0より古ければ新しいpackageに更新する
ランタイムをprovided.al2に変更する
{
"FunctionName": "test",
"Handler": "main",
"MemorySize": 128,
"Role": "arn:aws:iam::**********:role/test",
- "Runtime": "go1.x",
+ "Runtime": "provided.al2",
"Timeout": 60
}
バイナリ名をbootstrapに変更する
go build時のアウトプットをbootstrapにすればOKです。
オプション事項として、-tags lambda.norpc
を指定するとデプロイパッケージのサイズが小さくなります。これはgo1.xランタイムでしか使われない機能なので積極的に使用しましょう。
deploy:
- GOARCH=amd64 GOOS=linux go build -o main
+ GOARCH=amd64 GOOS=linux go build -tags lambda.norpc -o bootstrap
lambroll deploy --alias="current"
- rm -f main
+ rm -f bootstrap
github.com/aws/aws-lambda-go/lambda
がv1.18.0より古ければ新しいpackageに更新する
github.com/aws/aws-lambda-go/lambda
がv1.18.0より古いとprovided.al2で実行できないためgo.modを更新する必要があります。
$ go get github.com/aws/aws-lambda-go/lambda
個人的にはAWSのgo moduleはAWS側の機能追加などで頻繁に更新されるのでDependabotで確認や更新することをおすすめします。
Discussion