AWS Lambda c#异步API调用

Ora*_*ree 3 c# lambda amazon-web-services async-await aws-lambda

我有一个用c#编写的AWS lambda函数.该函数负责调用5-6个API调用(Post请求).

  1. 所有这些API调用都是相互独立的.
  2. 我不关心任何这些API调用的响应.
  3. 即使我不关心后续响应,每个API调用大约需要5秒钟才能完成.

问题:我希望我的lambda函数能够在一秒钟内执行并响应.我如何异步地进行API调用,以便lambda函数可以在我的时间限制内完成所有这些,而无需等待API调用的响应?理想情况下,我想实现一个火灾并忘记API调用系统,该系统可以毫无延迟地发送最终响应.

根据AWS lambda 文档,我必须在lambda中使用await运算符和异步调用,以避免在异步调用完成之前完成该函数.

我在这里错过了什么吗?或者有办法实现这一目标吗?

谢谢

Ste*_*ary 6

您无法在无服务器请求的"外部"运行代码.尝试这样做只会带来痛苦 - 因为您的无服务器主机不知道您的代码是不完整的,它可以随时终止您的托管过程.

正确的解决方案是让两个 lambda由队列分隔.第一个(面向外部的)lambda接受POST请求,在队列上删除消息,并将其响应返回给调用者.

第二个(仅限内部的)lambda监视队列并执行API调用.


Ash*_*han 5

对于您的用例,使用AWS Step函数将提供完全托管的解决方案。步骤如下。

  1. 根据您要并行触发还是一个接一个触发它们,定义您的AWS步函数流程。
  2. 将初始步骤与API Gateway POST方法集成在一起。
  3. 启动Step函数状态机后,它将返回成功状态(立即不等待结束状态)

与自定义Lambda流实现相比,使用Step函数没有什么好处。

  • 如果个别步骤返回错误,则可以配置重试每个步骤。
  • 如果任何一个步骤均以错误结束,则可以触发回调。
  • 您可以直观地识别和监视哪个步骤出现问题等。