Python 3.x 如何将相同的AmazonS3事件定向到几个不同的SQS队列中?

Python 3.x 如何将相同的AmazonS3事件定向到几个不同的SQS队列中?,python-3.x,amazon-web-services,amazon-s3,amazon-sqs,Python 3.x,Amazon Web Services,Amazon S3,Amazon Sqs,我正在使用Python中的AWS Lambda函数,它处理出现在同一Amazon S3存储桶和文件夹中的新文件 当新文件出现在s3:/folder1/folderA,B,C中时,将生成一个事件s3:ObjectCreated:*并将其放入sqs1,然后由Lambda1处理,然后在成功处理后从sqs1中删除 我需要与s3:/folder1/folderA中出现的相同新文件相关的相同事件,但不需要folderB或C也进入sqs2,由Lambda2处理。Lambda1修改该文件并将其保存在某处,例如,

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

当新文件出现在s3:/folder1/folderA,B,C中时,将生成一个事件s3:ObjectCreated:*并将其放入sqs1,然后由Lambda1处理,然后在成功处理后从sqs1中删除

我需要与s3:/folder1/folderA中出现的相同新文件相关的相同事件,但不需要folderB或C也进入sqs2,由Lambda2处理。Lambda1修改该文件并将其保存在某处,例如,Lambda2将该文件保存到数据库中

但是AWS文件说:

使用筛选器的通知配置无法定义前缀重叠、后缀重叠或前缀和后缀重叠的筛选规则


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

不应设置S3->SQS的S3对象通知,而应设置S3->Lambda的通知


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

您不应该设置S3->SQS的S3对象通知,而应该设置S3->lambda通知


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

您的需求似乎是:

将文件添加到folderA时,您希望向sqs1发送消息,而sqs2可以并行完成 将文件添加到folderB时,您希望向sqs2发送消息 这可以通过为每个文件夹配置单独的事件来完成:

事件A:前缀=folderA 事件B:前缀=文件夹B 事件C:前缀=文件夹C 然后,您可以使用Amazon SNS主题展开到多个队列:

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

eventB -> sqs1 -> Lambda1

eventC -> sqs1 -> Lambda1

您的要求似乎是:

将文件添加到folderA时,您希望向sqs1发送消息,而sqs2可以并行完成 将文件添加到folderB时,您希望向sqs2发送消息 这可以通过为每个文件夹配置单独的事件来完成:

事件A:前缀=folderA 事件B:前缀=文件夹B 事件C:前缀=文件夹C 然后,您可以使用Amazon SNS主题展开到多个队列:

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

eventB -> sqs1 -> Lambda1

eventC -> sqs1 -> Lambda1

这是我最初的想法。不幸的是,由于管道需求,它无法工作:如果管道出现问题,那么应该在部署时创建并销毁连接到lambda的s3 bucket。在我的情况下,它不起作用,我必须处理现有的s3,并在那里保存大量数据。SQS是解决此问题的已知解决方法。它可能会与附加的“特殊”LambdaSpecial一起工作,该LambdaSpecial从一个附加到s3事件的sqsSpecial读取消息,并将消息拆分为附加到Lambda1和Lambda2的2个或多个对应SQ。虽然看起来很复杂,但我希望有更简单/更好的方法。哦,我不知道你有这样的要求。你把我弄糊涂了。John的答案更容易实现您的sqs逻辑-只要您不给我们其他惊喜要求;是的,很抱歉,实际上有大约100个文件夹和几十个“文件夹”,它们必须在几个SQ之间共享事件。我只是试着尽可能简单地描述它,以了解如何应对这种情况。这是我最初的想法。不幸的是,由于管道需求,它无法工作:如果管道出现问题,那么应该在部署时创建并销毁连接到lambda的s3 bucket。在我的情况下,它不起作用,我必须处理现有的s3,并在那里保存大量数据。SQS是解决此问题的已知解决方法。它可能会与附加的“特殊”LambdaSpecial一起工作,该LambdaSpecial从一个附加到s3事件的sqsSpecial读取消息,并将消息拆分为附加到Lambda1和Lambda2的2个或多个对应SQ。虽然看起来很复杂,但我希望有更简单/更好的方法。哦,我不知道你有这样的要求。你把我弄糊涂了。John的答案更容易实现您的sqs逻辑-只要您不给我们其他惊喜要求;是的,很抱歉,实际上有大约100个文件夹和几十个“文件夹”,它们必须在几个SQ之间共享事件。我只是试着尽可能简单地描述它,以了解如何处理这种情况。你的描述有点混乱。您是说希望folderA中出现的文件同时向sqs1和sqs2发送消息,但folderB和folderC中出现的文件只应向sqs1发送消息?folderA、folderB、folderC中的新文件中的消息应转到sqs1,而sqs2中只应有来自folderA的消息,因此存在重叠是,那么,来自folderA的消息应该同时发送到sqs1和sqs2,而来自folderB和folderC的消息应该同时发送到sqs1和sqs2,这对吗
只转到sqs1?是的,它是正确的。您的描述有点混乱。您是说希望folderA中出现的文件同时向sqs1和sqs2发送消息,但folderB和folderC中出现的文件只应向sqs1发送消息?folderA、folderB、folderC中的新文件中的消息应转到sqs1,而sqs2中只应有来自folderA的消息,因此存在重叠是,那么,来自folderA的消息应该同时发送到sqs1和sqs2,而来自folderB和folderC的消息应该只发送到sqs1,这是正确的吗