2017-04-18 37 views
-2

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

这是预期的行为? 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 called 
+0

将您的代码添加到问题中。没有它,我们无法帮助你。 – Amy

+0

是的,当我发表评论时,这个问题中没有代码。你的回答令人困惑和不敬。 – Amy

回答

1
AWS

重用实例如本blog post描述的,在FAQofficial documentation

一般情况下,这些实例会被重复使用并随时更换。如果您的负载较高,AWS将创建更多并发实例。所以通常情况下,您的实例很可能会被重用,但您在获得回收时无法指望它。

通常情况下,第一次调用新实例的速度非常慢,因为运行时的初始化类似于加载本身,类加载等。后续调用通常要快得多,但如果您尚未将Lambda调用为而它的“冻结”也需要一些热身。

+0

当然,但我的理解中,实例的定义不应该映射到一个c#类。 aws lambda旋转了一个.net环境,或者我称之为实际实例的容器。否则,c#类本质上是一个单独的impl,我认为它没有记录在任何地方。然而,你的最后一个链接隐约描述了......与我所观察到的相似...... – mentat