如何将相同的 Amazon S3 事件定向到多个不同的 SQS 队列中?

How to direct the same Amazon S3 events into several different SQS queues?

我正在使用 AWS Lambda 函数(在 Python 中)处理出现在同一 Amazon S3 存储桶和文件夹中的新文件。

s3:/folder1/folderA, B, C 中出现新文件时,会生成一个事件 s3:ObjectCreated:* 并进入 sqs1,然后由 Lambda1 处理(然后从 sqs1处理成功后)。

我需要与出现在 s3:/folder1/folderA(但不是文件夹 B 或 C)中的同一个新文件相关的相同事件也进入 sqs2,由 [=17= 处理].例如,Lambda1 修改该文件并将其保存在某处,Lambda2 将该文件放入数据库。

但是 AWS 文档说:

Notification configurations that use Filter cannot define filtering rules with overlapping prefixes, overlapping suffixes, or prefix and suffix overlapping.

所以问题是如何绕过这个限制?有没有已知的推荐或标准解决方案?

您应该设置 (S3 -> Lambda) 的通知,而不是设置 (S3 -> SQS) 的 S3 对象通知。

在您的 lambda 函数中,您解析 S3 事件,然后编写您自己的逻辑以将有关 S3 事件的任何内容发送到您喜欢的任何 SQS 队列。

看来您的要求是:

  • 将文件添加到 folderA 后,您希望向 sqs1 AND sqs2 发送消息(可以在平行)
  • 将文件添加到 folderB 后,您希望向 sqs2
  • 发送消息

这可以通过为每个文件夹配置单独的事件来完成:

  • 事件 A:Prefix = folderA
  • 事件 B:Prefix = folderB
  • 事件 C:Prefix = folderC

然后您可以使用 Amazon SNS 主题 扇出 到多个队列:

eventA -> sns1 +-> sqs1 -> Lambda1
               |
               +-> sqs2 -> Lambda2

eventB -> sqs1 -> Lambda1

eventC -> sqs1 -> Lambda1