ランタイムAmazonLinux2のLambdaでGolangを実行

備忘録
この記事は約3分で読めます。

ランタイム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

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

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

GitHub - aitea1/allTest at AMAZONLINUX2_Golang_Lambda_Trial
色々なテスト用. Contribute to aitea1/allTest development by creating an account on GitHub.

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

# github.com/aws/aws-lambda-go/lambda

main.go

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

公式サイト情報

Go の Lambda 関数ハンドラーの定義 - AWS Lambda
Lambda 関数ハンドラーは、イベントを処理する関数コード内のメソッドです。
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

あとは何もいじらない

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

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をアップロードする。

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

{
  "Name": "value1"
}

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

タイトルとURLをコピーしました