我在AWS上运行了一个非常基本的Go lambda:
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func HandleRequest(ctx context.Context, event events.S3Event) {
fmt.Printf("%+v", event)
}
func main() {
lambda.Start(HandleRequest)
}
与go.mod
module xxx
go 1.18
require github.com/aws/aws-lambda-go v1.32.1
这个lambda是由S3上的PUT触发的,使用SQS队列。事件到达lambda,但是当我将文件上传到S3时,日志打印一个空事件:
{Records:[{EventVersion: EventSource:aws:sqs AWSRegion:eu-central-1 EventTime:0001-01-01 00:00:00 +0000 UTC EventName: PrincipalID:{PrincipalID:} RequestParameters:{SourceIPAddress:} ResponseElements:map[] S3:{SchemaVersion: ConfigurationID: Bucket:{Name: OwnerIdentity:{PrincipalID:} Arn:} Object:{Key: Size:0 URLDecodedKey: VersionID: ETag: Sequencer:}}}]}
现在,当我进入AWS lambda控制台并使用提供的S3 PUT示例单击Test Event时,将正确打印事件,包括示例值。
我认为这可能是因为来自SQS的事件格式与预期不同?这不是一个测试事件,我也试过了。
我怎么能看到哪个事件被传递给我的lambda?
啊。原来它应该是一个SQSEvent
,它包裹了S3Event
。