🫐

lambrollでgo1.xからprovided.al2ランタイムに移行する

2023/09/05に公開

AWS LambdaのGoのランタイムでgo1.xの終了が2023年12月31日になると告知がありました。
今後はprovided.al2を使用する必要があります。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-golang.html

とはいえ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ランタイムでしか使われない機能なので積極的に使用しましょう。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/golang-package.html

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を更新する必要があります。

https://twitter.com/fujiwara/status/1695984642757943367

$ go get github.com/aws/aws-lambda-go/lambda

個人的にはAWSのgo moduleはAWS側の機能追加などで頻繁に更新されるのでDependabotで確認や更新することをおすすめします。

Discussion