19/01/2022 - AWS
Use commands below if you wish to trigger a Lambda function when a new object is put in a S3 bucket.
// Create lambda function
GOOS=linux CGO_ENABLED=0 go build -ldflags "-s -w" -o lambda/plain/main lambda/plain/main.go
zip lambda.zip lambda/plain/main
aws --profile localstack --endpoint-url http://localhost:4566 lambda create-function \
--function-name test-lambda \
--handler lambda/plain/main \
--runtime go1.x \
--role test-role \
--zip-file fileb://lambda.zip
// Create S3 bucket
aws --profile localstack --endpoint-url http://localhost:4566 s3 mb s3://test-bucket
// Configure S3 and Lambda notification
aws --profile localstack --endpoint-url http://localhost:4566 s3api put-bucket-notification-configuration \
--bucket test-bucket \
--notification-configuration '{"LambdaFunctionConfigurations":[{"Id":"1","LambdaFunctionArn":"arn:aws:lambda:eu-west-1:000000000000:function:test-lambda","Events":["s3:ObjectCreated:Put"]}]}'
aws --profile localstack --endpoint-url http://localhost:4566 s3 cp test.txt s3://test-bucket
This is what your Lambda event look like.
map[
Records:[
map[
awsRegion:eu-west-1
eventName:ObjectCreated:Put
eventSource:aws:s3
eventTime:2022-01-21T13:54:29.483Z
eventVersion:2.1
requestParameters:map[
sourceIPAddress:127.0.0.1
]
responseElements:map[
x-amz-id-2:efp51TnqcoF8ehtrt9Z/2
x-amz-request-id:c517
]
s3:map[
bucket:map[
arn:arn:aws:s3:::test-bucket
name:test-bucket
ownerIdentity:map[
principalId:A3NLZZKExample
]
]
configurationId:testConfigRule
object:map[
eTag:"b054ccc597fedf6c"
key:test.txt
sequencer:0D6DCD90
size:10
versionId:
]
s3SchemaVersion:1.0
]
userIdentity:map[
principalId:ARKLGMP
]
]
]
]