AWS Lambdaの go1.xランタイムのサポートが切れるのでアップデートする。
provided.al2023の選択
ランタイムアップデートについてはAWS LambdaのGo言語向けドキュメントにまとまっている。 以下以外のドキュメントでは Amazon Linux 2023 (provided.al2023)に関する記述は無く、Amazon Linux 2 (provided.al2)の記載しかない。これは英語ドキュメントでも同様。しかし、特に違いを考慮することなく provided.al2023を選択して問題なさそう。
実行ファイル名を bootstrapにする
go1.xランタイムでは実行ファイル名をHandlerとして指定することができた。 provider.al2以降ではbootstrapで固定なのでHandlerの設定と合わせて修正する。ランタイムを Amazon Linux 2023 にすると、Handlerはbootstrap
バイナリビルド
これはランタイムアップデートとは直接関係ないけれど、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
が出力されるみたい。