🔺

SAMテンプレートのGo 1.xランタイムサポート終了に対応する

2023/08/28に公開
2

この記事で書くこと

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が指定されています。

template.yaml(移行前)
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のビルド/デプロイが実行できるようになります。

template.yaml
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 buildsam deployを実行してLambdaの動作に問題がなければ移行完了です。
サンプルリポジトリgit diff before afterを実行すると移行前と移行後の差分が確認できます。

参考

Migrating AWS Lambda functions from the Go1.x runtime to the custom runtime on Amazon Linux 2

株式会社ROBONの技術ブログ

Discussion

KenichiKenichi

移行後 template.yamlArchitectures:x86_64 が正解かと思います。 ( x86_65になってます)

ssstoyamassstoyama

ご指摘ありがとうございます🙇
typoしていた箇所を修正しました。