这个问题更多的是关于如何最好地构建 ETL 管道的架构问题。目前,我有一个通过 SQS ping 的 AWS Lambda。但是处理数据可能需要 15 分钟多一点(AWS 的运行时限制)并且使用 sam build
进行部署会导致 .zip 大于 250MB,因此它会引发错误。因此需要 AWS Lambda 的替代方案。到目前为止我看到的替代方案是:
SQS -> ECS(法门) SQS -> Lambda -> ECS (Fargate)
我没有找到任何关于这两个选项的优缺点的提示,也没有找到通常首选的选项。有关如何处理此问题的任何提示?
最佳答案
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?
一旦您开始遇到 15 分钟限制或 Lambda 的部署文件大小限制,那么可能是时候迁移到 ECS Fargate 了。
请注意,当您将 SQS 配置为 Lambda 的事件源时,AWS 实际上在幕后运行一个进程来轮询 SQS 队列以获取消息,然后使用这些消息调用您的 Lambda 函数。 SQS 从不将消息“推送”到任何地方,它是一种“拉取”服务。
考虑到这一点,在迁移到 ECS 时,您需要更改代码,以便它轮询 SQS 以获取要处理的消息。一般来说,配置它的方法是拥有一个 docker 镜像,当作为容器生成时,它只会永远轮询 SQS 队列,处理它收到的任何消息。然后根据 SQS 队列中的消息数量配置 ECS 自动缩放。当队列中有 0 个消息时,ECS 可以缩小到 0 个正在运行的任务。当队列中有消息时,ECS 可以扩展到您希望运行的任意数量的任务以处理消息。在此设置中不需要 Lambda。
关于aws-lambda - SQS 到 ECS (Fargate) 或 SQS 到 Lambda 到 ECS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71692732/