💭
Go Lambda関数を書く
はじめに
今回も実務にてAWS Lambdaを使用することになったのでその際に簡単なサンプルを作成しました。
設定として、すぐ実行するものと、S3のイベントをトリガーにして関数が起動するものの二種類記述しました。
Lambdaの設定等は今回は省きます。
コード
では早速
package main
import (
"context"
"fmt"
"log"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
/*
** $ GOOS=linux GOARCH=amd64 go build -o main lambda.go && zip main.zip main
*/
type MyEvent struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
}
type Response struct {
BucketName string `json:"bucketName"`
Key string `json:"key"`
Size int64 `json:"size"`
StatusCode int `json:"statusCode"`
}
func HandleRequest(ctx context.Context, name MyEvent) (string, error) {
fmt.Println(name.FirstName)
fmt.Println(name.LastName)
return fmt.Sprintf("Hello %s %s!", name.FirstName, name.LastName), nil
}
func s3Lambda(ctx context.Context, event events.S3Event) (interface{}, error) {
response := Response{}
for _, record := range event.Records {
response.BucketName = record.S3.Bucket.Name
response.Key = record.S3.Object.Key
response.Size = record.S3.Object.Size
}
response.StatusCode = 200
log.Println("response: ", response)
return response, nil
}
func main() {
lambda.Start(HandleRequest)
lambda.Start(s3Lambda)
}
まずmain関数でLambdaを起動状態にします。
func HandleRequest(ctx context.Context, name MyEvent) (string, error) {
fmt.Println(name.FirstName)
fmt.Println(name.LastName)
return fmt.Sprintf("Hello %s %s!", name.FirstName, name.LastName), nil
}
こちらが簡単に起動するものです。
テストで確認したのですがJSONで値を入力してやればログに「Hello (FirstName) (LastName)!」が出力されます。
func s3Lambda(ctx context.Context, event events.S3Event) (interface{}, error) {
response := Response{}
for _, record := range event.Records {
response.BucketName = record.S3.Bucket.Name
response.Key = record.S3.Object.Key
response.Size = record.S3.Object.Size
}
response.StatusCode = 200
log.Println("response: ", response)
return response, nil
}
実用的なのはこちらかと思います。
event events.S3Eventを引数にS3のイベントをトリガーにして起動し、受け取ったevent.Recordsから詳細情報を取得します。
ここでは簡単に取得したイベント詳細を出力するのみですが、前回の画像リサイズやS3が受け取ったオブジェクトの編集などが実際に使われるのではないかと思います。
Lambdaにコードを読み込ませる
$ GOOS=linux GOARCH=amd64 go build -o main lambda.go && zip main.zip main
今回は記述したコードをzipファイルにして読み込ませるようにしました。
実行可能ファイルのLambda.go(今回のmain関数を記述したファイル)をmainという名前でコンパイルします。その後にmain.zipにパッケージ化してデプロイパッケージを作成します。
まとめ
初めてAWSを触って感じたのが、ドキュメントが日本語で出回っている資料も多く見受けられたので非常に簡単に設定など出来たと思います。
これからもS3やLambda以外も触ってみようと思います。
Discussion