AWS S3:在收到文件后通过S3通知触发多个目标

时间:2015-07-17 08:11:55

标签: amazon-web-services amazon-s3 amazon-sqs aws-lambda

我想在AWS S3存储桶中设置以下事件/通知配置: 收到文件后(s3:ObjectCreated:*),将触发两个目标:

  • SQS:将文件排队等待几天的保留期的详细后期处理
  • Lambda:快速立即进行指标处理

当我尝试通过AWS控制台设置配置时,我收到以下错误消息:

Configurations overlap. Configurations on the same bucket cannot share a common event type. : s3:ObjectCreated:*, s3:ObjectCreated:*

我已尝试按照用户指南的建议通过AWS SDK(Java)设置配置,但结果类似:

Caught an AmazonServiceException, which means your request made it to Amazon S3, but was rejected with an error response for some reason.
Error Message:    Configurations overlap. Configurations on the same bucket cannot share a common event type. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: A0E8738522EA218F)
HTTP Status Code: 400
AWS Error Code:   InvalidArgument
Error Type:       Client
Request ID:       A0E8738522EA218F
Error XML<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidArgument</Code><Message>Configurations overlap. Configurations on the same bucket cannot share a common event type.</Message><ArgumentName>Event</ArgumentName><ArgumentValue>s3:ObjectCreated:*, s3:ObjectCreated:*</ArgumentValue><RequestId>A0E8738522EA218F</RequestId><HostId>p4qYoIXi38u3Jl3p0xpI7TFWgs0ZxsqK89oDTTy8D/tbw39NnaIT99jIvHIxt4XliRFxqNWl32M=</HostId></Error>

3 个答案:

答案 0 :(得分:6)

我建议您将S3 Notifications发布到SNS Topic并让Lambda functionSQS Queue订阅此SNS Topic

这种架构可以帮助您实现所需的目标。

答案 1 :(得分:5)

最佳解决方案可能是在文件上传到S3时触发SNS通知,然后使用SNS的扇出&#39;能够发送多个,同时发送的SQS消息,然后可以独立接收和执行。

或者,如果您只想处理第2步&#39;当且仅当'步骤1&#39;处理后,您可以为步骤1&#39;触发单个SQS消息,然后仅在成功完成&#39;步骤1&#39;后,执行最后一步操作&#39; 1&#39;为第二步&#39;发送第二个sqs事件进一步处理。

答案 2 :(得分:1)

实际上发生此错误是因为您尝试通过不同的功能挂接同一事件。

转到存储桶的properties标签,然后滚动到Events部分

例如,如果已在该存储桶上注册了“ PUT”事件,则将无法在其他功能上注册“ PUT”事件。