Alv*_*vin 5 amazon-web-services slack-api aws-lambda
我正在使用 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, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;
const options = {
hostname: 'f3e7f2cc.ngrok.io',
port: 443,
path: '/',
method: 'GET'
};
setTimeout(function() {
console.log(options);
const req = https.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
});
req.end();
}, 5000);
const end = new Date().toUTCString();
callback(null, {body: "OK", timeEnd: end});
};
Run Code Online (Sandbox Code Playgroud)
但是,我可以看到这没有按预期工作。我立即得到callback
响应,但 5 秒后未收到 GET 请求。是否需要调整其他配置才能实现这一目标?还是我应该使用 2 lambda 方法?
归档时间: |
|
查看次数: |
1209 次 |
最近记录: |