我正在使用Golang构建一个AWS Lambda函数,用于将n到m个S3存储桶中的内容复制。有一个要求是支持S3触发器以及从SQS获取数据,在那里存储了所有源S3存储桶的更改。代码可以在这里找到:https://github.com/maknahar/s3copy
我尝试了以下方法:
func main() {
lambda.Start(ProcessIncomingS3Events)
lambda.Start(ProcessIncomingEvents)
}
func ProcessIncomingS3Events(event events.S3Event) error {
...
log.Println("Got S3 Event")
return processS3Trigger(config, event)
}
func ProcessIncomingEvents() error {
...
log.Println("Defaulting to SQS")
return processSQSMessage(config)
}
在这种情况下,每次都会触发第一个事件ProcessIncomingS3Events
。我也尝试了以下操作。
func main() {
lambda.Start(ProcessIncomingEvents)
}
func ProcessIncomingEvents(event interface{}) error {
...
switch request := event.(type) {
case events.S3Event:
log.Println("Got S3 Event")
return processS3Trigger(config, request)
case types.Nil:
log.Println("Defaulting to SQS")
return processSQSMessage(config)
default:
log.Println("Could not find the event type")
}
return nil
}
在这种情况下,Lambda无法检测到类型,并且在每个触发器中记录了“Could not find the event type”。
是否有一种方式通过AWS SDK支持函数的多个触发器?