首页 > 解决方案 > 使用 AWS lambda 的异步后台作业

问题描述

我想创建一个 REST API,让调用者提交作业的输入,该作业将在后台运行可能一分钟左右。因此,API 应该生成一个后台作业并立即返回一个作业 ID。然后,客户端可以向另一个端点查询作业状态和结果。

我脑子里第一个跳出来的想法是这样的:

为此,worker lambda 必须有足够的超时时间才能完成一项大型工作。API lambdas 总是很快的,因为它们只是进行数据库操作并提交给 SQS。

我仍然需要有 2 个 lambda 表达式让我感到困扰。但是如果我理解正确的话,在它向调用者返回响应之后,就不可能继续执行 lambda 函数了。我还考虑过可能对事件使用 Kinesis 而不是 SQS,因为执行顺序并不重要,每个调用者都希望在合理的时间内完成他的工作。我的流量模式可能是 100.000 个工作岗位的爆发,然后几天什么都没有。我也在考虑在每个工作中支持多个子工作,这样每个工作实际上就是 1-100 个工作单位。

我不想为工作人员托管实例,例如 ECS 上的容器;我只想依赖无服务器概念。

这是一个不错的设置还是有更好的设置?

标签: amazon-web-servicesaws-lambdaamazon-sqsamazon-kinesis

解决方案


这看起来像是AWS Step Functions的一个很好的用例。

您可以从API Gateway启动状态机执行,这将返回执行 ID。

该执行 ID 可用于查询执行状态,执行所有必要的后台处理


推荐阅读