【发布时间】:2021-05-30 15:40:36
【问题描述】:
我正在寻找一种解决方案,以便我可以在同步代码中安全(并且几乎可靠地)发出 CW 指标 (putMetricData)。我的用例如下:
// Lambda Main Handler
export const handler = async () => {
await step1Aync();
step2Sync();
step3Sync();
return {};
}
async function step1Aync() {
await doSomething();
await doSomething();
// could await this call, but dont want to since I dont need the value, nor do I want to handle failures
cloudwatch.putMetricData();
}
function step2Sync() {
doSomething();
// do not want to make this function async to use await here
cloudwatch.putMetricData();
}
function step3Sync() {
doSomething();
// do not want to make this function async to use await here
cloudwatch.putMetricData();
}
我的理解是,当putMetricData 请求被推送到 Lambda 的事件循环中时,不能保证它们最终会向 CW 发送 HTTP 请求(因为 Lambda 执行上下文可能会在请求发生之前冻结)。当然,除非我使 step2Sync 和 step3Sync 异步并为每个 Promise 使用 await。
我的部分理由是我想通过专门不处理来自 CloudWatch 的响应来减少 Lambda 的响应时间。这个 Lambda 是一个时间敏感的 API(API 网关)。如果对 CW 的“某些”请求失败(少于 1%),那没关系。
我读到如果再次使用相同的 Lambda 上下文,它将清空事件循环。但是,不能保证。我不知道这里的 SLA 是什么,可以这么说。
简而言之,当我没有明确需要时,我不想使用异步函数。我的理解正确吗?
【问题讨论】:
标签: javascript node.js aws-lambda amazon-cloudwatch