返回响应后 Lambda 能否继续?



Lambda 是否可以在返回状态代码为202之类的响应后继续处理,然后 Lambda 必须在结束 Lambda 之前调用请求?

关于在函数返回响应之前启动的后台进程或回调,来自 Lambda 文档:

如果 AWS Lambda 选择重用执行上下文,则由您的 Lambda 函数启动的后台进程或回调在函数结束时未完成。在代码退出之前,应确保代码中的任何后台进程或回调都已完成。

编写 Lambda 函数代码时,不要假设 AWS Lambda 会自动重用执行上下文进行后续函数调用。其他因素可能要求 AWS Lambda 创建新的执行上下文,这可能会导致意外结果,例如数据库连接失败。

此外,对于 Node.js使用非异步处理程序的 Lambda 函数:

对于非异步处理程序,函数执行将继续,直到事件循环为空或函数超时。在所有事件循环任务完成之前,响应不会发送到调用程序。如果函数超时,则会返回错误。通过将context.callbackWaitsForEmptyEventLoop设置为 false,可以将运行时配置为立即发送响应。

您可以使用两个 lambda。第一个 lambda (lambda 1) 将对保存您的代码的 lambda (lambda 2) 进行异步调用。调用它后,您可以干净地退出"lambda 1",而无需等待"lambda 2"返回响应。

仅使用 AWS Lambda 是不可能的。

您可能需要研究 AWS Step Functions 以解决您的问题。

如果将自己的bootstrap实现为自定义运行时的一部分,则可以执行此操作。与您可能已经熟悉的提供的 AWS Lambda 运行时不同,自定义运行时控制自己的事件循环。

以下是文档的相关摘录:

处理任务

[...]

清理– 在获取下一个事件之前释放未使用的资源、将数据发送到其他服务或执行其他任务。

您可以使用Step Functions来实现此目的。根据您的要求,可以使用以下方法:

  1. 通过 API 网关触发步进功能。API 网关将立即返回响应,然后步进函数将接管并触发 Lambda 函数,它将确保 Lambda 执行到最后。

  2. 您可以触发 Lambda 1,Lambda 1 将触发步进函数,然后步进函数将触发 Lambda 2。我假设 Lambda 2 将用于繁重的处理。

相关内容

  • 没有找到相关文章

最新更新