【发布时间】:2018-08-10 02:14:37
【问题描述】:
我目前的工作流程如下:
用户将文件放入 s3 存储桶 -> s3 存储桶触发事件到 lambda -> lambda 处理 s3 存储桶中的文件。它还调用其他 lambda。
我想处理多个用户同时将文件放入 s3 存储桶的场景。我想处理文件,以便首先处理文件。为了处理这个问题,我希望 lambda 在 15 分钟内处理每个文件(例如)。
所以,我想使用 SQS 对输入文件放置事件进行排队。 S3 可以向 SQS 触发事件。一个 cloudwatch 事件可以每 15 分钟触发一次 lambda,该 lambda 可以轮询 SQS 队列中的第一个 s3 文件丢弃事件,并对其进行处理。
SQS 的问题是标准 SQS 队列不遵守顺序,FIFO SQS 队列与 S3 不兼容(参考:Error setting up notifications from S3 bucket to FIFO SQS queue due to required ".fifo" suffix)
我应该使用什么方法来解决这个问题?
谢谢,
斯瓦加提卡
【问题讨论】:
-
我想处理文件,以便首先处理最先放置的文件。 为什么?在大型分布式系统中,“第一”是一个变得模糊的概念。
-
有人有解决方法吗?陷入了同样的情况。
-
我们提出了解决方案,其中 s3 事件触发 dummy lambda -> dummy lambda 处理事件并写入 SQS -> SQS 将消息排队。 cloudwatch 事件每 15 分钟激活一次,并触发主 lambda。此 lambda 接收 cloudwatch 事件并轮询 sqs 以获取任何消息。如果有,它会拾取最旧的消息并进行处理。
标签: amazon-web-services amazon-s3 aws-lambda amazon-sqs