# Lambda _**最終更新日:2025/08/17**_ ちょっとした処理から複雑なワークフローまで {{toc}} ## プロジェクトテンプレート追加 Visual Studioで使用できるプロジェクトのテンプレートを追加する。 なくても大丈夫だけど、あったほうが便利。 ``` shell dotnet new install Amazon.Lambda.Templates ``` 追加すると新しいプロジェクトの作成でLambda用のプロジェクトテンプレートが選択できるようになる。 {{thumbnail(lambda_01.png, size=800, title=プロジェクトテンプレート1)}} Lambda用プロジェクトテンプレート選択後に入力する追加情報は、AWS CLIで設定したプロファイルとデプロイするリージョンを入力する。 後で設定できるので入力しなくても大丈夫。 {{thumbnail(lambda_02.png, size=800, title=プロジェクトテンプレート2)}} こんな感じのプロジェクトが作成される。 {{thumbnail(lambda_03.png, size=800, title=プロジェクトテンプレート3)}} ・Readme.md デプロイ手順とか書いてある。 ・Function.cs ラムダ関数本体。 ・aws-lambda-tools-defaults.json デプロイするとき用の設定ファイル。 プロジェクト作成時に入力していなかったら、このファイルを修正する。 ## デプロイ方法 プロジェクトテンプレートで作成した場合、ご丁寧にReadMeにデプロイ方法が書いてある。 下記はプロジェクト名を「Project1」で作成した場合のやり方。 ``` shell cd "Project1/src/Project1" dotnet lambda deploy-function ``` ソースフォルダに移動して、デプロイコマンド打つだけ、かんたん! ・・・なんだけど、初回はラムダ関数名やIAMロールを入力しないといけないので、先にAWSマネジメントコンソール上で作ったほうが楽。 {{thumbnail(lambda_04.png, size=800, title=デプロイ方法1)}} 2回目以降は、先程のデプロイコマンドに関数名を付ければOK。 下記はラムダ関数名を「myProjectFuntion1」で作ったときのコマンド。 ``` shell dotnet lambda deploy-function myProjectFuntion1 ``` ## コード プロジェクトテンプレートで「Lambda Empty Function」を選んだ場合、下記のソースが自動生成される。 ・Function.cs ``` csharp using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace Project1 { public class Function { /// /// A simple function that takes a string and does a ToUpper /// /// The event for the Lambda function handler to process. /// The ILambdaContext that provides methods for logging and describing the Lambda environment. /// public string FunctionHandler(string input, ILambdaContext context) { return input.ToUpper(); } } } ``` ### パラメータ説明 ・input 実行時の入力パラメータ。 呼び出し時に型に合わせてJSON文字列を自動的にデシリアライズしてくれる。 ・context コンテキスト。 ラムダ関数情報を見たりロガーを呼び出したりできる。 ### 入出力の型 実装する際、大体は入力する型と出力する型は決まっていると思うので、それに合わせたクラスを作成する。 下記はAWSマネジメントコンソール上でテストするときのデフォルト値に合わせたクラス。 出力側は適当。 ・InputParam.cs ``` csharp using System.Text.Json.Serialization; namespace Project1 { public record InputParam { [JsonPropertyName("key1")] public required string Key1 { get; set; } [JsonPropertyName("key2")] public required string Key2 { get; set; } [JsonPropertyName("key3")] public required string Key3 { get; set; } } } ``` ・OutputParam.cs ``` csharp using System.Text.Json.Serialization; namespace Project1 { public record OutputParam { [JsonPropertyName("newKey")] public required string NewKey { get; set; } [JsonPropertyName("count")] public required int Count { get; set; } } } ``` 「input」の型と戻り値の型を、作成したクラスに変更する。 処理は適当。 ・Function.cs ``` csharp namespace Project1 { public class Function { /// /// A simple function that takes a string and does a ToUpper /// /// The event for the Lambda function handler to process. /// The ILambdaContext that provides methods for logging and describing the Lambda environment. /// public OutputParam FunctionHandler(InputParam input, ILambdaContext context) { return new() { NewKey = $"{input.Key1} {input.Key2} {input.Key3}", Count = 12345 }; } } } ``` AWSマネジメントコンソール上、デプロイしたラムダ関数の詳細ページで、テストタブを選択するとラムダ関数をテストすることができる。 今回はデフォルトの入力パラメータに合わせてクラスを作成したので、このままテストボタンをポチッとして実行させる。 {{thumbnail(lambda_05.png, size=800, title=コード1)}} 成功すると、戻り値とか処理結果など表示される。 {{thumbnail(lambda_06.png, size=800, title=コード2)}} 戻り値の返し方については公式ガイドを参照。 なんかいい感じに解釈してくれるっぽい。 ・Lambda 関数 URL の呼び出し https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-invocation.html ## リンク 公式ガイド ・C# による Lambda 関数の構築 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-csharp.html --- [[aws:wiki|メインページに戻る]]