S3のイベントをHookしてLambdaを実行するサンプルはいくつかあったが、Go言語の情報がほとんどなかったのでテンプレだけ書いておく。
eventは自作せず、aws-lambda-goが提供しているevents.S3Event
を使う
events.S3Event
の中にはevent.Records
があり、その中にイベントを発生させたS3のBucket,Keyが入っている
package main
import (
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func s3lambda(ctx context.Context, event events.S3Event) (interface{}, error) {
for _, record := range event.Records {
// recordの中にイベント発生させたS3のBucket名やKeyが入っている
bucket := record.S3.Bucket.Name
key := record.S3.Object.Key
}
resp := &struct {
StatusCode uint `json:"statusCode"`
}{StatusCode: 200}
return resp, nil
}
func main() {
lambda.Start(s3lambda)
}