Lambda

最終更新日:2025/08/17

ちょっとした処理から複雑なワークフローまで

プロジェクトテンプレート追加

Visual Studioで使用できるプロジェクトのテンプレートを追加する。
なくても大丈夫だけど、あったほうが便利。

dotnet new install Amazon.Lambda.Templates

追加すると新しいプロジェクトの作成でLambda用のプロジェクトテンプレートが選択できるようになる。
lambda_01.png

Lambda用プロジェクトテンプレート選択後に入力する追加情報は、AWS CLIで設定したプロファイルとデプロイするリージョンを入力する。
後で設定できるので入力しなくても大丈夫。

lambda_02.png

こんな感じのプロジェクトが作成される。
lambda_03.png

・Readme.md
デプロイ手順とか書いてある。

・Function.cs
ラムダ関数本体。

・aws-lambda-tools-defaults.json
デプロイするとき用の設定ファイル。
プロジェクト作成時に入力していなかったら、このファイルを修正する。

デプロイ方法

プロジェクトテンプレートで作成した場合、ご丁寧にReadMeにデプロイ方法が書いてある。
下記はプロジェクト名を「Project1」で作成した場合のやり方。

cd "Project1/src/Project1"
dotnet lambda deploy-function

ソースフォルダに移動して、デプロイコマンド打つだけ、かんたん!
・・・なんだけど、初回はラムダ関数名やIAMロールを入力しないといけないので、先にAWSマネジメントコンソール上で作ったほうが楽。

lambda_04.png

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_05.png

成功すると、戻り値とか処理結果など表示される。

lambda_06.png

戻り値の返し方については公式ガイドを参照。
なんかいい感じに解釈してくれるっぽい。

・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


メインページに戻る