Zappa + AWS Lambda 用于异步 API

问题描述 投票:0回答:1

我正在开发一个托管在 AWS Lambda 上的 Flask Python 后端(使用 Zappa 自动部署到 Lambda 和 API Gateway)。我的一个端点需要大约 30-60 秒才能执行,这导致我的 API 网关有时会由于 CloudFront 限制而超时。

我正在考虑以异步方式重新实现此端点像这样。但是,我担心调用单独的 AWS Lambda 函数来运行长时间运行的任务(在从初始 Lambda 函数排队之后)并不是解决此问题的正确方法。我的理由是,Lambda 函数适用于无状态、非常快速的进程,因此使用它来执行长时间运行的端点任务似乎是错误的。有没有更好的方法来做到这一点(特别是在我现在使用的 Flask/Zappa/AWS 系统中)?

感谢您的帮助!

flask aws-lambda aws-api-gateway zappa
1个回答
0
投票

Lambda 是唯一可以做到以下功能的服务:

  1. 快速响应入站 API 请求并且
  2. 不使用时成本为零。

如果长时间运行的任务可以在 Lambda 15 分钟最大超时内完成,则使用 Lambda。请注意,随着 RAM 的增加,Lambda 函数可以获得更多分配的 CPU 和网络带宽,因此它们可以在 15 分钟内完成更多工作。

如果需要的时间超过 15 分钟,是否可以将其拆分为多个子任务,每个子任务在 15 分钟内完成?如果是这样,请查看具有多个并发或串行 Lambda 函数的 Step Functions。

否则,听起来您可能需要不同的计算解决方案,例如 ECS 或 EC2。然而,EC2 和基于 ECS 的持久解决方案都会产生一些持续成本。

对于不适合 Lambda 15 分钟超时的任务,另一个选择可能是考虑创建一些编排,可以在新启动的 EC2 实例上运行您的任务,该实例在任务完成时自动终止,因此您只需付费需要时用于 EC2。这个选项有点复杂,因为你必须编排它,例如通过触发 Lambda 函数来启动 EC2 实例,将任务规范传递给该 EC2 实例(例如,在启动时用户数据脚本中或通过 SMS 运行命令),监控是否成功,收集输出,完成时自动终止实例,并处理重试/失败。

© www.soinside.com 2019 - 2024. All rights reserved.