tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

.NET Core on Lambda のローカルデバッグでロガーと変数確認する

Serverless といっても大事なのはローカルで実行できるかです。どんなに便利でも高速なイテレーションが回せないものは継続せず触らなくなったり進化の波に乗れません。

さて、.NET Core on Lambda が出た当初にローカルデバッグで ILambdaContext がないため context 触ろうとするとエラーが出ていましたがサクッと解決できるのでしましょう。

これができることで、関数内の変数を見たり、ローカル実行専用の任意ロガー実装を差し込んだりできます。便利。

tech.guitarrapc.com

目次

ILambdaContext の実装クラスを作る

前回のエラーは ILambdaContext の実装がなく、nullを渡していたためでした。ということで context をザクッと1ファイルに書いちゃいます。namespace はご自分の関数でも shared class にしてください。

gist.github.com

これでローカル実行用の Program.cs から Lambda関数呼び出し時に context が渡せ、Loggerの中でコンソールに書き出します。

gist.github.com

ローカル実行して上手く通っていますね?

f:id:guitarrapc_tech:20161215041138p:plain

f:id:guitarrapc_tech:20161215041120p:plain

f:id:guitarrapc_tech:20161215041149p:plain

ちなみに、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 です。

まとめ

簡単な実装でずいぶんと楽になります。インターフェースなのでお好きな実装でどうぞ。

リポジトリも更新してあります。

github.com