【发布时间】:2017-10-17 08:44:49
【问题描述】:
我正在使用serverless-warmup-plugin 运行一个每 10 分钟调用一次 Lambda 函数的 cron。 Lambda 函数的代码如下所示:
exports.lambda = (event, context, callback) => {
if (event.source === 'serverless-plugin-warmup') {
console.log('Thawing lambda...')
callback(null, 'Lambda is warm!')
} else {
// ... logic for the lambda function
}
}
这在纸面上有效,但实际上 cron 不会保持 Lambda 函数温暖,即使它每 10 分钟成功调用一次。
当通过不同的事件源(除了 cron)调用 Lambda 时,代码执行大约需要 2-3 秒。一旦以这种方式执行,Lambda 实际上会预热并在 400 毫秒内开始响应。它会保持一段时间的温暖。
我在这里错过了什么?
【问题讨论】:
-
10 分钟?我想在没有活动的 10 分钟内足以让 lambda 容器冷却。例如,您是否尝试减少到 5 或 3 分钟?
-
您是否还检查了 cloudwatch 事件? (就像要执行的 cron 一样)。正如汤姆所说,10 分钟可能足以让 lambda 冷却下来。刚刚在读这个medium.com/build-acl/…
-
我认为问题与 cron 的频率无关,因为即使我在 cron 调用函数 10 秒后调用该函数,它仍然会经历冷启动(3 秒响应时间),以下调用在 400 毫秒内响应。就好像来自 cron 的调用并没有影响到这一切。
-
检查云观察日志中插件创建的 lambda。您可能没有添加允许它连接到您的其他 lambda 的权限。
-
插件创建的 lambda 日志看起来不错,它拥有所有必要的 IAM 权限并成功调用了它应该调用的 lambda。这些成功的调用也会出现在目标 lambda 的日志中。
标签: node.js aws-lambda serverless-framework