📌

go言語でaws-samを使用し、lambda関数を作成する

2024/09/29に公開

go1.xのランタイムがaws-samでのサポートを終了したため、go言語でaws-samを使う方法があまり世の中に出回っていない気がします。なので今回簡単な方法をまとめてみました。

以下のコマンドをDownloadsディレクトリなどで実行

sam init

以下のように設定。ここに記述されていないものは基本デフォルトでOK。あとはプロジェクト名をつける。

Which template source would you like to use?
    1 - AWS Quick Start Templates
    2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
    1 - Hello World Example
    2 - Multi-step workflow
    3 - Serverless API
    4 - Scheduled task
    5 - Standalone function
    6 - Data processing
    7 - Hello World Example With Powertools
    8 - Infrastructure event management
    9 - Serverless Connector Hello World Example
    10 - Multi-step workflow with Connectors
    11 - Lambda EFS example
    12 - DynamoDB Example
    13 - Machine Learning
Template: 1
Use the most popular runtime and package type? (Python and zip) [y/N]: N

Which runtime would you like to use?
	1 - dotnet8
	2 - dotnet6
	3 - go (provided.al2)
	4 - go (provided.al2023)
	5 - graalvm.java11 (provided.al2)
	6 - graalvm.java17 (provided.al2)
	7 - java21
	8 - java17
	9 - java11
	10 - java8.al2
	11 - nodejs20.x
	12 - nodejs18.x
	13 - nodejs16.x
	14 - python3.9
	15 - python3.8
	16 - python3.12
	17 - python3.11
	18 - python3.10
	19 - ruby3.3
	20 - ruby3.2
	21 - rust (provided.al2)
	22 - rust (provided.al2023)
Runtime: 3

What package type would you like to use?
	1 - Zip
	2 - Image
Package type: 1

VSCodeで作成したフォルダを開く。
以下の2点を行う
①以下のコードをtemplate.yamlに貼り付ける。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Lambda function using Go

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: bootstrap        # Handlerとして 'bootstrap' を指定
      Runtime: provided.al2     # provided.al2 を指定
      CodeUri: ./hello-world     # hello-worldディレクトリを指定
      PackageType: Zip
      MemorySize: 512
      Timeout: 900
      Policies:
        - AWSLambdaBasicExecutionRole

②Makefileをhello-worldディレクトリに移動させる。

buildの実行

以下のコマンドを実行。

sam build

そしてhello-worldディレクトリに移動して以下のコマンドを打つ

GOOS=linux GOARCH=amd64 go build -o bootstrap main.go

そして次に以下のコマンドを実行

zip function.zip bootstrap

この2つのbootstrap、function.zipファイルをHelloWorldFunctionディレクトリに移動させる。

デプロイ

以下のコマンドでデプロイ

sam deploy guided

最後に以下のコマンドをターミナルでうち、環境変数を登録して終了

aws lambda update-function-configuration \
    --function-name 関数名 \
    --environment "Variables={API_USERNAME=aaa,API_PASSWORD=aaa,API_CLIENT_ID=aaa,API_CLIENT_SECRET=aaa}"

Discussion