我正在使用 API Gateway + AWS Lambda 来处理 Slack API 请求。Slack 要求 Lambda 函数在 3 秒内响应 2XX,因此我需要快速响应,然后触发一些长时间运行的数据库操作。问题在于 AWS Lambda 要么 (1) 在将响应返回给 API Gateway 之前等待事件循环为空,要么 (2) 在callback
调用函数时立即返回响应,但它随后立即冻结 Lambda 执行和长时间运行用它操作。
阅读这篇文章和其他文章,似乎通常的方法是使用 2 个 lambdas:一个立即发送 2XX 响应,然后触发另一个 lambda 来执行长时间运行的操作。这看起来不错,但我很好奇是否可以通过一次 lambda 调用来完成?
Mark B 的这个优秀答案中的选项 #1似乎表明使用 AWS 服务集成类型是可能的。但是按照这些说明设置 AWS 服务集成并将调用类型标头设置为“事件”,我仍然看到 Lambda 执行在callback
运行后立即冻结。
我的小测试处理程序看起来像这样。我怀疑 Cloudwatch 在callback
运行后没有记录,所以我让处理程序在 5 秒超时后向 ngrok 发出请求。我希望立即收到回调响应,然后 5 秒后,我通过 ngrok 收到一个 GET 请求。
const https = require('https');
exports.handler = function(event, …
Run Code Online (Sandbox Code Playgroud)