对 aws api 网关的长调用

Long call to aws api gateway

我遇到的问题如下。

我目前有一个 .NET 系统 运行。此系统调用服务大约需要 1 分钟。

我们目前正在将解决方案迁移到 AWS。我发现的问题是 Lambda 工作在 1 分钟内运行(因为它调用另一个系统需要 1 分钟)并且一切正常。但是当我从网关 API 进行调用时,您会超时。调查我发现它的最大超时时间为 29 秒。

然后我需要知道我可以有什么解决方案来解决这个问题,考虑到我需要等待 1 分钟才能使用 lambda 函数。

我想到的一个是触发来自 API 的调用,lambda 函数运行,并从客户端创建一个池以查看事务的状态。但是我不知道如何保持初始调用 "in memory" 并且当我再次调用 api 以查看状态时,我知道我在谈论相同的请求,以获取结果数据

这里概述了解决此问题的一种方法:

  • 客户端发出 /start API 请求触发 Lambda #1
  • Lambda #1 是短暂的并执行以下操作:
    • 生成一个 UUID 作为即将执行的任务的相关因子
    • 在 DynamoDB 中创建一个新项目,以 UUID 作为键
    • 触发持久(1 分钟)Lambda #2 启动,将 UUID 传递给它
    • returns 客户端的 UUID
  • Lambda #2 是长期存在的并且执行以下操作:
    • 无论需要什么工作
    • 定期将其状态和结果更新到 DynamoDB 中的 UUID 项目
  • 客户端可以根据自己喜欢的任何时间表轮询 /status?id=UUID API,这会触发 Lambda #3
  • Lambda #3 是短暂的并执行以下操作:
    • 从 DynamoDB 查询 UUID 项目
    • return 给客户的当前状态和任何结果

/status?id=UUID API 调用指示长寿命任务完成(或失败)时,客户端可以发出最终的API 请求以指示它已可以删除与 UUID 和 DynamoDB 项目关联的结果,或者您可以只在 DynamoDB 项目上实施 TTL。

这个过程看似复杂,其实不然。

客户端可以轮询后端的状态和结果,而不是轮询 SQS 队列或订阅 SNS 主题。