SAMテンプレートのGo 1.xランタイムサポート終了に対応する
この記事で書くこと
AWS LambdaのGo1.xランタイムのサポート終了が2023年12月31日と迫っているので、先日Go1.xを使っていたSAMテンプレートをprovided.al2ランタイムに移行しました。そこでランタイムの移行に必要だったことをこの記事では書き残したいと思います。
移行方法
AWSから公開されているコチラの移行手順にしたがって作業すれば基本的には問題ないと思います。私の環境ではとくに問題など起きずに移行することができました。
ちなみに、Goのバージョンは1.20でビルドコマンドはsam build
を使っています。
SAMテンプレートで変更が必要な箇所はHandler,Runtimeで、Architectures,BuildMethodを新しく追加します。
以下のテンプレートは移行前のものです。Runtimeにはgo1.x、Handlerにはmainが指定されています。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Runtime: go1.x
Handler: main
Resources:
HelloGateway:
Type: AWS::Serverless::Api
Properties:
StageName: Sample
HelloFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello/
Events:
Api:
Type: Api
Properties:
Path: /hello
Method: GET
RestApiId: !Ref HelloGateway
そして以下は移行後のテンプレートです。Runtimeにはprovided.al2、Handlerはbootstrapと指定する必要があります。また、HelloFunctionのMetadataのBuildMethodにgo1.xを追加しました。BuildMethodにgo1.xを指定することでgo1.x Runtimeの場合と同じようにSAMのビルド/デプロイが実行できるようになります。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
- Runtime: go1.x
- Handler: main
+ Runtime: provided.al2
+ Handler: bootstrap
+ Architectures:
+ - x86_64
Resources:
HelloGateway:
Type: AWS::Serverless::Api
Properties:
StageName: Sample
HelloFunction:
Type: AWS::Serverless::Function
+ Metadata:
+ BuildMethod: go1.x
Properties:
CodeUri: hello/
Events:
Api:
Type: Api
Properties:
Path: /hello
Method: GET
RestApiId: !Ref HelloGateway
移行後のテンプレートでsam build
やsam deploy
を実行してLambdaの動作に問題がなければ移行完了です。
サンプルリポジトリでgit diff before after
を実行すると移行前と移行後の差分が確認できます。
参考
Migrating AWS Lambda functions from the Go1.x runtime to the custom runtime on Amazon Linux 2
Discussion
移行後
template.yaml
のArchitectures:
はx86_64
が正解かと思います。 ( x86_65になってます)ご指摘ありがとうございます🙇
typoしていた箇所を修正しました。