[小ネタ] Go言語のAWS SAMアプリケーションでAmazon Linux 2023カスタムランタイムを使おうとしてちょっとだけハマった話

2023.11.15

小ネタです。

先日LambdaでAmazon Linux 2023ベースのカスタムランタイムがサポートされたのを受け、私の手持ちのGo言語SAMアプリケーションのランタイムを更新することにしました。

対象アプリケーションについてはこちらの記事をご覧ください。

Go 1.xランタイムのサポート終了に備えAmazon Linux 2022ベースのカスタムランタイムに切り替え済みのアプリケーションです。

ハマったポイント

SAM CLIでAmazon Linux 2023ベースのカスタムランタイム(provided.al2023)をサポートするのはVer.1.101.0以降となります。
最初にSAM CLIのバージョンをVer.1.101.0に上げ、template.yamlのランタイム指定をprovided.al2からprovided.al2023に更新するだけで作業は終わりです。

template.yamlの変更点

diff --git a/template.yaml b/template.yaml
index 91043f6..c25afb2 100644
--- a/template.yaml
+++ b/template.yaml
@@ -22,7 +22,7 @@ Resources:
       FunctionName: cloudwatch-ojichat-widget
       CodeUri: function/
       Handler: bootstrap
-      Runtime: provided.al2
+      Runtime: provided.al2023
       Architectures: [arm64]
       Tracing: PassThrough
     Metadata:

あとはsam buildしてやるだけですが

Error: GoModulesBuilder:Validation - Runtime provided023 is not supported

という割と謎なメッセージと共にエラーになってしまいました。 

原因と対応策

原因を調査してみたところSAM CLIの不具合であることが分かりました。

template.yamlに記載されたランタイム名からaws-lambda-buildersに引き渡す情報を解析する処理がAmazon Linux 2023環境に対応できなかったため「provided023というランタイムは無い」旨のエラーとなっています。

ちょうど本日この不具合を修正したVer.1.102.0がリリースされたのでバージョンアップしてやれば解消できます。

SAM CLIのバージョンアップ後は下図のとおりsam buildが正常終了します。

あとは動作確認してデプロイしてやればOKです。

最後に

以上となります。

ちょっとした不具合でしたが丁度良い?タイミングで遭遇したのでブログにしてみました。
Go言語のSAMアプリケーションの場合はSAM CLI Ver.1.101.0ではなくVer.102.0から実用可能な点だけ覚えて頂ければ幸いです。