AWS S3:收到文件后通过 S3 通知触发多个目标
AWS S3: Trigger multiple targets via S3 Notification upon file receipt
我想在 AWS S3 存储桶中设置以下 event/notification 配置:
收到文件 (s3:ObjectCreated:*) 后,应触发两个目标:
- SQS:将文件排队以进行详细 post 处理,保留几天
- 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>
最好的解决方案可能是在文件上传到 S3 时触发 SNS 通知,然后使用 SNS 的 'fanout' 功能发送多个同步的 SQS 消息,然后可以接收这些消息并对其执行操作独立。
或者,如果您只想在处理 'step 1' 时处理 'step 2',那么您可以为 'step 1' 触发单个 SQS 消息,然后仅在'step 1' 的成功完成,'step 1' 的最后一幕是为 'step 2' 发送第二个 sqs 事件以供进一步处理。
我建议您将 S3 Notifications
发布到 SNS Topic
并让您的 Lambda function
和 SQS Queue
订阅此 SNS Topic
。
此架构应该可以帮助您实现您的目标。
实际上这个错误的发生是因为你试图用不同的函数挂钩同一个事件。
转到存储桶的 properties
选项卡并滚动到 Events
部分
例如,如果 "PUT" 事件已在该存储桶上注册,您将无法在另一个函数上注册 "PUT" 事件。
我想在 AWS S3 存储桶中设置以下 event/notification 配置: 收到文件 (s3:ObjectCreated:*) 后,应触发两个目标:
- SQS:将文件排队以进行详细 post 处理,保留几天
- 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>
最好的解决方案可能是在文件上传到 S3 时触发 SNS 通知,然后使用 SNS 的 'fanout' 功能发送多个同步的 SQS 消息,然后可以接收这些消息并对其执行操作独立。
或者,如果您只想在处理 'step 1' 时处理 'step 2',那么您可以为 'step 1' 触发单个 SQS 消息,然后仅在'step 1' 的成功完成,'step 1' 的最后一幕是为 'step 2' 发送第二个 sqs 事件以供进一步处理。
我建议您将 S3 Notifications
发布到 SNS Topic
并让您的 Lambda function
和 SQS Queue
订阅此 SNS Topic
。
此架构应该可以帮助您实现您的目标。
实际上这个错误的发生是因为你试图用不同的函数挂钩同一个事件。
转到存储桶的 properties
选项卡并滚动到 Events
部分
例如,如果 "PUT" 事件已在该存储桶上注册,您将无法在另一个函数上注册 "PUT" 事件。