AWS Lambda のトリガーで CloudWatch の定数(JSONテキスト)を使った場合の起動方法

AWS Lambda が .Net Core をサポートしたと言うけど実際に書くときに引数ってどうするんだろうって思ったので調べてみた。

Lambda のトリガーには CloudWatch を指定できて、 CloudWatch のイベントからルールを設定することでバッチ処理のようなことをさせることができます。

CloudWatch のイベントルール

f:id:naught00:20180831151541p:plain

ここで気になったのが、入力を 定数 (JSON テキスト) にした場合、ソースコードで引数部分をどう書けばいいのかということでした。

f:id:naught00:20180831151614p:plain

イベントごとの書き方の違い

一致したイベント

一致したイベントの場合は CloudWatchLogsEvent で大丈夫です。

public string FunctionHandler(CloudWatchLogsEvent logEvent) { }

定数 (JSON テキスト)

定数 (JSON テキスト) の場合、 JSON テキストは

{ "mode": "test" }

としたとき、 一致したイベント と同じ書き方ではエラーになります。

Object reference not set to an instance of an object.: NullReferenceException

その場合は自分で型を定義してあげることで無事Lambdaを起動することができます。

public class InputParameter
{
    public string mode { get; set; }
}

public string FunctionHandler(InputParameter params) {
    Console.WriteLine("mode : {0}", params.mode);
}

参考

github.com