在连续的lambda调用中未调用C#Lambda构造函数

men*_*tat 1 c# aws-lambda

我在其构造函数中有一个带有一些代码的ac#aws lambda类。每次启动Lambda方法本身时都会调用它(带有SNS消息),但是,我看不到构造函数被调用(添加了从cloudwatch中观察到的日志调用)。仅在首次启动时(在aws堆栈创建/更新之后)调用构造函数。

这是预期的行为吗?aws是否以某种方式缓存我的lambda实例?

public class MyLambda
{
     public MyLambda()
     {
          Console.WriteLine("Hello from ctor");
     }

     // This is the method assigned in CloudFormation
     public bool Execute(SNSEvent snsEvent)
     {          
          Console.WriteLine("Lambda called");
          return true;
     }
}
Run Code Online (Sandbox Code Playgroud)

这是cloudwatch日志中的结果;首次启动Lambda:

Hello from ctor
Lambda called
Run Code Online (Sandbox Code Playgroud)

和第二次启动Lambda

Lambda called
Run Code Online (Sandbox Code Playgroud)

Udo*_*eld 7

AWS按本博客文章常见问题解答官方文档中的描述重用实例。

通常,实例会不时地被重用和替换。如果负载较高,则AWS将创建更多并发实例。因此,通常您的实例很可能被重用,但是当它们被回收时,您不能指望它。当实例被重用时,构造函数将不会再被调用,因为在初始化期间已经调用了该构造函数。

通常,第一次调用新实例的速度很慢,因为运行时会进行初始化,例如加载自身,加载类以及调用构造函数。由于Lambda已完全初始化,因此后续调用通常要快得多。但是,如果您有一段时间没有打电话给Lambda了,它也需要从其“冻结”中进行一些预热。这仍然构成重用,因此不会再次调用构造函数。