AWS Lambda 支持来自各种来源的触发函数,包括 S3 事件和 SQS 消息。但是,当您需要 Lambda 函数响应多个触发器时,就会出现困境。
您尝试了两种方法:
第一种方法:
func main() {
lambda.Start(ProcessIncomingS3Events)
lambda.Start(ProcessIncomingEvents)
}
此方法失败,因为第一个触发器 (ProcessIncomingS3Events) 始终会处理所有事件。
第二种方法:
func main() {
lambda.Start(ProcessIncomingEvents)
}
在这种情况下,Lambda 无法识别事件类型,导致所有触发器出现“无法找到事件类型”错误。
为了克服这些限制,您可以使用 AWS Handler 接口实现多事件处理程序。这是一个示例实现:
type Handler struct {
// Define global variables or context information
}
func (h Handler) Invoke(ctx context.Context, data []byte) ([]byte, error) {
// Unmarshal the data based on different event types
var apiGatewayEvent events.APIGatewayProxyRequest
if err := json.Unmarshal(data, &apiGatewayEvent); err == nil {
// Handle API Gateway event
}
var snsEvent events.SNSEvent
if err := json.Unmarshal(data, &snsEvent); err == nil {
// Handle SNS event
}
return nil, nil
}
func main() {
lambda.StartHandler(Handler{})
}
通过这种方法,您的 Lambda 函数可以侦听各种 AWS 事件并相应地处理它们。
虽然使用此方法提供了灵活性,但请记住 Lambda 函数旨在有效地处理单一类型的事件。混合多种事件类型可能会带来复杂性和性能问题。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3