Lambda(AmazonLinux2)でGoを実行する方法

ランタイムAmazonLinux2のLambdaでGolangを実行してみた。

環境情報

  • OS:macOS Sonoma
  • エディタ:VSCode
  • Golang:1.22.2

補足:環境をなるべく汚したくないので、Dockerで作業用のコンテナ用意して作業してる。

前提条件

すでに、golangを実行する環境が整っていること。

プロジェクト構成

AWS-SDK-GO-V2-SSM/
├── ssmTest/
│ └── docker/
│     └── dockerfile
├── src/
└── docker-compose.yml

VS Code のエクスプローラーに表示したプロジェクト構成(ssmTest/docker/dockerfile、src、docker-compose.yml)

dockerfileの中身やdocker-compose.ymlの中身は省きます。

興味ある方はgithub覗いてください。

GitHub - aitea1/allTest at AMAZONLINUX2_Golang_Lambda_Trial

go.modがあるディレクトリで以下のコマンドを実行する。

zip function.zip bootstrap

ソース自体はAWSのサンプルコード丸パクリ

公式サイト情報

Go の Lambda 関数ハンドラーの定義 - AWS Lambda

main.go

package main

import (
	"context"
	"fmt"

	"github.com/aws/aws-lambda-go/lambda"
)

type MyEvent struct {
	Name string `json:"name"`
}

func HandleRequest(ctx context.Context, event *MyEvent) (*string, error) {
	if event == nil {
		return nil, fmt.Errorf("received nil event")
	}
	message := fmt.Sprintf("Hello %s!", event.Name)
	return &message, nil
}

func main() {
	lambda.Start(HandleRequest)
}

Lambda関数作成

関数名は適当

ランタイムはAmazon Linux2

アーキテクチャはx86_64

あとは何もいじらない

Lambda の関数作成画面(一から作成、関数名 ssmTest、ランタイム Amazon Linux 2、アーキテクチャ x86_64)

コンパイルコマンドを実行する。

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

アーキテクチャを「arm64」にした場合、以下のコマンドを実行する。

GOOS=linux GOARCH=arm64 go build -tags lambda.norpc -o bootstrap main.go

zipコマンドを実行する。

zip myFunction.zip bootstrap

作成されたzipをLambdaにアップロードする。

画像右下の「アップロード元」を押下して、zipをアップロードする。

作成直後の Lambda 関数 ssmTest の画面(コードソースの右上にアップロード元ボタン)

テストタブ内のイベントJSONを以下のように修正し、「テスト」ボタン押下する。

{
  "Name": "value1"
}

成功ログが出ればAmazonLinux2のLambdaでGolangがテスト実行が完了。

Lambda のテスト実行結果(成功、ログに “Hello value1!”)