我有一个 c# aws lambda 类,其构造函数中包含一些代码。每次我启动它(使用 SNS 消息发布)时,lambda 方法本身都会被调用,但是,我看不到构造函数被调用(添加了日志调用以从 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;
}
}
这是cloudwatch日志中的结果;
第一次启动Lambda:
Hello from ctor
Lambda called
以及第二次启动Lambda
Lambda called
AWS 按照本节中的描述重用实例博客文章 https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/, 在里面FAQ https://aws.amazon.com/lambda/faqs/和官方文档 http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html.
一般来说,实例会时不时地被重用和替换。如果负载较高,AWS 将创建更多并发实例。因此,通常您的实例很可能会被重用,但您不能指望它们会被回收。
当实例被重用时,构造函数不会被再次调用,因为构造函数在初始化期间已经被调用了。
通常,对新实例的第一次调用非常慢,因为运行时会进行初始化,例如加载自身、类加载等以及调用构造函数。由于 Lambda 已经完全初始化,后续调用通常会更快。但是,如果您有一段时间没有调用 Lambda,它也需要从“冻结”状态中进行一些预热。这仍然构成重用,因此构造函数不会再次被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)