AWS Lambda:识别冷启动

AWS Lambda: Identifying cold starts

有没有明确的方法来识别"cold starts"?是在 Lambda 本身的运行时,还是通过日志?我知道冷启动的特点是运行时间更长,我实际上可以看到这一点,但我正在寻找一种明确的方法。 如果重要的话,我正在使用 Node.js。

更新:下面有两个很好的答案,针对两个用例: - 在 lambda 运行时识别冷启动。 - 从 CloudWatch 日志识别冷启动。

如果你在你的 NodeJS 脚本的顶部添加一些初始化代码,你将能够在代码中告诉它这是一个冷启动,然后如果你想看到它,你将能够记录它在日志中。例如:

var coldStart = true;
console.log("This line of code exists outside the handler, and only executes on a cold start");


exports.myHandler = function(event, context, callback) {
  if (coldStart) {
    console.log("First time the handler was called since this function was deployed in this container");
  }
  coldStart = false;

   ...
   
  callback(...);
}

更新:

如果您只关心在日志中看到冷启动,Lambda 现在会在 CloudWatch Logs 中记录一个额外的 “Init Duration” 冷启动值。

如果您正在查看 CloudWatch 日志,您的 Lambda 函数的每个 LogGroup 代表一个单独的容器,因此该 LogGroup 的第一次调用是您的冷启动。

作为一项更新,AWS 现在以 "Init Duration" 的形式在 Cloudwatch 日志的报告部分内提供有关冷启动的可见信息。不受冷启动影响的调用不会在日志中包含此信息

Duration: 1866.19 ms Billed Duration: 1900 ms Memory Size: 512 MB Max Memory Used: 163 MB Init Duration: 2172.14 ms