2017-04-18 29 views
-2

コンストラクタにいくつかのコードを含むc#awsラムダクラスがあります。ラムダメソッド自体は、(SNSメッセージ投稿で)開始するたびに呼び出されていますが、コンストラクタが呼び出されるのを見ることができません(クラウドウォッチから観測するログ呼び出しが追加されています)。コンストラクタは最初の起動時(awsスタックの作成/更新後)にのみ呼び出されます。C#連続したラムダ呼び出しでラムダコンストラクタが呼び出されない

これは正常な動作ですか?何とか私のラムダインスタンスをキャッシュしていますか?

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; 
    } 
} 

ここでは、クラウドウォッチログの結果を示します。 初めてラムダを開始:FAQofficial documentationに、このblog postに記載されているようにラムダ

Hello from ctor 
Lambda called 

および第2の時間開始

Lambda called 
+0

質問にコードを追加してください。私たちはそれなしであなたを助けることはできません。 – Amy

+0

はい、コメントをしたとき、この質問にはコードはありませんでした。あなたの反応は混乱し、無礼です。 – Amy

答えて

1

AWSは、インスタンスを再利用します。

一般的に、インスタンスは再利用され、毎回置き換えられます。負荷が高い場合、AWSはより多くの同時インスタンスを作成します。だから、通常、あなたのインスタンスは再利用される可能性が非常に高いですが、リサイクルされるにつれてそれを期待することはできません。

通常、新しいインスタンスへの最初の呼び出しは非常に遅く、実行時にはロード自体、クラスの読み込みなどの初期化が行われるため、後続の呼び出しは通常ははるかに高速ですが、 「凍結」からのウォーミングアップも必要です。

+0

確かに、私の理解ではインスタンスの定義をC#クラスにマッピングすべきではありません。 aws lambdaは実際のインスタンスとして呼び出す.net環境またはコンテナをスピンアップします。さもなければ、C#クラスは本質的にシングルトンインプラントですが、どこにも書かれていないと思います。しかし、あなたの最後のリンクは、私が観察しているのと同じようにsthを曖昧に表しています。 – mentat