ランタイム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がテスト実行が完了。