Serverless といっても大事なのはローカルで実行できるかです。どんなに便利でも高速なイテレーションが回せないものは継続せず触らなくなったり進化の波に乗れません。
さて、.NET Core on Lambda が出た当初にローカルデバッグで ILambdaContext
がないため context 触ろうとするとエラーが出ていましたがサクッと解決できるのでしましょう。
これができることで、関数内の変数を見たり、ローカル実行専用の任意ロガー実装を差し込んだりできます。便利。
目次
ILambdaContext の実装クラスを作る
前回のエラーは ILambdaContext
の実装がなく、nullを渡していたためでした。ということで context をザクッと1ファイルに書いちゃいます。namespace
はご自分の関数でも shared class にしてください。
これでローカル実行用の Program.cs
から Lambda関数呼び出し時に context が渡せ、Loggerの中でコンソールに書き出します。
ローカル実行して上手く通っていますね?
ちなみに、AWS Lambda Project with Tests でプロジェクト追加したときのテストクラスではTestClientContext
が用意されており、その中の TestLambdaLogger
は 以下のような実装になっています。大体同じですね。
public class TestLambdaLogger : ILambdaLogger { /// <summary> /// Buffer for all the log messages written to the logger. /// </summary> public StringBuilder Buffer { get; } = new StringBuilder(); /// <summary>Write log messages to the console.</summary> /// <param name="message"></param> public void Log(string message) { this.LogLine(message); } /// <summary>Write log messages to the console.</summary> /// <param name="message"></param> public void LogLine(string message) { this.Buffer.AppendLine(message); Console.WriteLine(message); } }
そのため テストクラスではvar context = new TestLambdaContext();
のままでok です。
まとめ
簡単な実装でずいぶんと楽になります。インターフェースなのでお好きな実装でどうぞ。
リポジトリも更新してあります。