【问题标题】:AWS S3: Trigger multiple targets via S3 Notification upon file receiptAWS S3:收到文件后通过 S3 通知触发多个目标
【发布时间】:2015-10-06 21:36:56
【问题描述】:

我想在 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>

【问题讨论】:

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


    【解决方案1】:

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

    这种架构应该可以帮助您实现您的目标。

    【讨论】:

    • 对,SNS 解决了这个问题。我已向 SNS 主题添加了“SNS:Publish”权限,并将我的 SQS 队列和我的 Lambda 函数配置为 SNS 主题的订阅者。在 Lambda 函数中,我可以解压包含 buckt、路径等的 S3Object,然后从 S3 下载文件并进行处理。
    【解决方案2】:

    最好的解决方案可能是在文件上传到 S3 时触发 SNS 通知,然后使用 SNS 的“扇出”功能发送多个同步的 SQS 消息,然后可以独立接收这些消息并采取行动。

    或者,如果您只想处理“步骤 2”当且仅当“步骤 1”被处理时,那么您可以为“步骤 1”触发单个 SQS 消息,然后仅在“步骤”成功完成时1',让'step 1'的最后一个动作是为'step 2'发送第二个sqs事件以供进一步处理。

    【讨论】:

      【解决方案3】:

      其实这个错误是因为你试图通过不同的函数来钩住同一个事件。

      转到存储桶的 properties 选项卡并滚动到 Events 部分

      例如,如果“PUT”事件已在该存储桶上注册,您将无法在其他函数上注册“PUT”事件。

      【讨论】:

      • 这对我有帮助!我没有意识到还有一个事件与刚刚删除的先前 lambda 的存储桶相关联。不确定我的情况是否只是时间故障,但快速转到上面提到的属性告诉我它仍然存在。
      猜你喜欢
      • 2019-02-26
      • 2022-01-23
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2018-04-15
      • 2021-05-07
      • 2021-01-27
      相关资源
      最近更新 更多