最終更新日:2025/08/17
ちょっとした処理から複雑なワークフローまで
Visual Studioで使用できるプロジェクトのテンプレートを追加する。
なくても大丈夫だけど、あったほうが便利。
dotnet new install Amazon.Lambda.Templates
追加すると新しいプロジェクトの作成でLambda用のプロジェクトテンプレートが選択できるようになる。
Lambda用プロジェクトテンプレート選択後に入力する追加情報は、AWS CLIで設定したプロファイルとデプロイするリージョンを入力する。
後で設定できるので入力しなくても大丈夫。
・Readme.md
デプロイ手順とか書いてある。
・Function.cs
ラムダ関数本体。
・aws-lambda-tools-defaults.json
デプロイするとき用の設定ファイル。
プロジェクト作成時に入力していなかったら、このファイルを修正する。
プロジェクトテンプレートで作成した場合、ご丁寧にReadMeにデプロイ方法が書いてある。
下記はプロジェクト名を「Project1」で作成した場合のやり方。
cd "Project1/src/Project1"
dotnet lambda deploy-function
ソースフォルダに移動して、デプロイコマンド打つだけ、かんたん!
・・・なんだけど、初回はラムダ関数名やIAMロールを入力しないといけないので、先にAWSマネジメントコンソール上で作ったほうが楽。
2回目以降は、先程のデプロイコマンドに関数名を付ければOK。
下記はラムダ関数名を「myProjectFuntion1」で作ったときのコマンド。
dotnet lambda deploy-function myProjectFuntion1
プロジェクトテンプレートで「Lambda Empty Function」を選んだ場合、下記のソースが自動生成される。
・Function.cs
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
{
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input">The event for the Lambda function handler to process.</param>
/// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
/// <returns></returns>
public string FunctionHandler(string input, ILambdaContext context)
{
return input.ToUpper();
}
}
}
・input
実行時の入力パラメータ。
呼び出し時に型に合わせてJSON文字列を自動的にデシリアライズしてくれる。
・context
コンテキスト。
ラムダ関数情報を見たりロガーを呼び出したりできる。
実装する際、大体は入力する型と出力する型は決まっていると思うので、それに合わせたクラスを作成する。
下記はAWSマネジメントコンソール上でテストするときのデフォルト値に合わせたクラス。
出力側は適当。
・InputParam.cs
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
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
namespace Project1
{
public class Function
{
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input">The event for the Lambda function handler to process.</param>
/// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
/// <returns></returns>
public OutputParam FunctionHandler(InputParam input, ILambdaContext context)
{
return new()
{
NewKey = $"{input.Key1} {input.Key2} {input.Key3}",
Count = 12345
};
}
}
}
AWSマネジメントコンソール上、デプロイしたラムダ関数の詳細ページで、テストタブを選択するとラムダ関数をテストすることができる。
今回はデフォルトの入力パラメータに合わせてクラスを作成したので、このままテストボタンをポチッとして実行させる。
成功すると、戻り値とか処理結果など表示される。
戻り値の返し方については公式ガイドを参照。
なんかいい感じに解釈してくれるっぽい。
・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