SQS 到 ECS (Fargate) 或 SQS 到 Lambda 到 ECS

SQS to ECS (Fargate) or SQS to Lambda to ECS

这个问题更多的是关于如何最好地构建 ETL 管道的架构问题。目前,我有一个通过 SQS ping 的 AWS Lambda。但是处理数据可能需要 15 分钟多一点(AWS 的运行时限制)并且使用 sam build 进行部署会导致 .zip 大于 250MB,因此它会引发错误。因此需要 AWS Lambda 的替代方案。目前我看到的备选方案是:

SQS -> ECS(法门) SQS -> Lambda -> ECS (Fargate)

我没有找到关于这两个选项的 pro/cons 的任何提示,也没有找到通常首选的选项。关于如何处理这个问题的任何提示?

I don't find any hints to the pro/cons of both options, and what is generally a preferred option. Any tips on how to approach this?

一旦您开始运行违反 Lambda 的 15 分钟限制或部署文件大小限制,那么可能是时候迁移到 ECS Fargate 了。

请注意,当您将 SQS 配置为 Lambda 的事件源时,AWS 在幕后实际上 运行 正在运行一个进程来轮询 SQS 队列中的消息,然后使用这些消息调用您的 Lambda 函数. SQS 从不将消息“推送”到任何地方,它是一种“拉取”服务。

考虑到这一点,在迁移到 ECS 时,您需要更改代码,以便它轮询 SQS 以获取要处理的消息。一般来说,配置它的方法是拥有一个 docker 图像,当作为容器生成时,它只会永远轮询 SQS 队列,处理它收到的任何消息。然后根据SQS队列中的消息数配置ECS auto-scaling。当队列中有 0 条消息时,ECS 可以缩小到 0 运行ning 个任务。当队列中有消息时,ECS 可以扩展到您希望 运行 处理消息的任意数量的任务。在此设置中不需要 Lambda。