AWS LambdaのGoランタイムを provided.al2023にアップデートする

AWS Lambdaの go1.xランタイムのサポートが切れるのでアップデートする。

aws.amazon.com

provided.al2023の選択

ランタイムアップデートについてはAWS LambdaのGo言語向けドキュメントにまとまっている。 以下以外のドキュメントでは Amazon Linux 2023 (provided.al2023)に関する記述は無く、Amazon Linux 2 (provided.al2)の記載しかない。これは英語ドキュメントでも同様。しかし、特に違いを考慮することなく provided.al2023を選択して問題なさそう。

docs.aws.amazon.com

実行ファイル名を bootstrapにする

go1.xランタイムでは実行ファイル名をHandlerとして指定することができた。 provider.al2以降ではbootstrapで固定なのでHandlerの設定と合わせて修正する。ランタイムを Amazon Linux 2023 にすると、Handlerはbootstrap

docs.aws.amazon.com

バイナリビルド

これはランタイムアップデートとは直接関係ないけれど、macOS上でgo buildすると当然 GOOS=darwin、GOARCHはarm64 または amd64となる。

AWS Lambda向けには GOOS=linux GOARCH=amd64を指定してビルドする必要がある。特に問題なければGOARCH=arm64でビルドしてアーキテクチャでarm64を選択しても問題なさそう。

エラーログ

Handler名が間違っていたり、ビルド設定が間違っていたりするとどちらも実行時に以下のような Runtime.InvalidEntrypoint のエラーになる。 エラーメッセージを見てHandlerの修正ミスかな?と思っていたらビルドアーキテクチャ設定の間違いだった。

Phase: init  Status: error   Error Type: Runtime.InvalidEntrypoint

ちなみに、Handlerの設定ミスだと後続のエラーログに Error: Couldn't find valid bootstrap(s): [/var/task/bootstrap /opt/bootstrap] が出力され、ビルドアーキテクチャの設定ミスだと Error: fork/exec /var/task/bootstrap: exec format error が出力されるみたい。