我正在使用 AWS Lambda 函数(使用 Python),该函数处理出现在同一 Amazon S3 存储桶和文件夹中的新文件。
当
s3:/folder1/folderA, B, C
中出现新文件时,会生成s3:ObjectCreated:*
事件并进入sqs1
,然后由Lambda1
处理(处理成功后从sqs1
中删除)。
我需要与
s3:/folder1/folderA
(但不是文件夹 B 或 C)中出现的同一新文件相关的相同事件也进入 sqs2
,由 Lambda2
处理。 Lambda1
修改该文件并将其保存在某处,例如,Lambda2
将该文件放入数据库。
但是 AWS 文档说:
使用 Filter 的通知配置无法定义前缀重叠、后缀重叠或前后缀重叠的过滤规则。
那么问题是如何绕过这个限制?是否有任何已知的推荐或标准解决方案?
看来您的要求是:
folderA
时,您希望向 sqs1
AND sqs2
发送消息(可以并行完成)folderB
时,您希望向 sqs2
这可以通过为每个文件夹配置单独的事件来完成:
Prefix = folderA
Prefix = folderB
Prefix = folderC
然后,您可以使用 Amazon SNS 主题扇出到多个队列:
eventA -> sns1 +-> sqs1 -> Lambda1
|
+-> sqs2 -> Lambda2
eventB -> sqs1 -> Lambda1
eventC -> sqs1 -> Lambda1
您不应设置 (S3 -> SQS) 的 S3 对象通知,而应设置 (S3 -> Lambda) 的通知。
在 lambda 函数中,您解析 S3 事件,然后编写自己的逻辑,将有关 S3 事件的任何内容发送到您喜欢的任何 SQS 队列。
要将相同的 S3 事件、事件文件夹 A 发送到 SQS1 和 SQS2 - 将事件发送到 SNS 主题并将 SQS 队列订阅到主题 [SQS1 和 SQS2]