はじめに
MacでC#のLambdaプロジェクトを作成し、Visual Studio for Macでテストプロジェクトをデバッグ実行した記録です。
できたこと
- C#のLambdaプロジェクトを作成
- AWS Lambdaへのデプロイ
- AWS Lambdaでのテスト
- Visual Studio for Macでソリューション化
- テストプロジェクトのデバッグ実行
AWS Lambda上で動くプログラムをアタッチしてデバッグしたわけではありません。
テストプロジェクトをローカルPC上でデバッグ実行しました。
準備
アクセスキー ID とシークレットアクセスキーを設定
PCからAWSにアクセスできるようにアクセスキー ID とシークレットアクセスキーを設定します。
-
AWS CLIのインストール
インストール手順は以下のURLを参照してください。
参考:https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html -
設定
以下のURLを参考にアクセスキー ID とシークレットアクセスキーを設定します。
参考:https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html
.NET Core CLI
-
プロジェクトテンプレートの追加
dotnet new -i Amazon.Lambda.Templates
コマンドを実行して、.NET Core CLIにAWS Lambdaのテンプレートを追加します。 -
Amazon.Lambda.Tools .NET Core Global Tool のインストール
dotnet tool install -g Amazon.Lambda.Tools
コマンドを実行します。
参考:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/csharp-package-cli.html
プロジェクトの作成
空のLambdaプロジェクト作成するコマンドを実行します。
dotnet new lambda.EmptyFunction --name {メソッド名}
(以下、{メソッド名}に「SelectFunction」と指定した想定で説明します。)
色々とファイルが生成されますが、Lambda関数を実行するとFunction.csのFunction.FunctionHandler()メソッドが呼び出されることになります。
デフォルトでは、引数inputで受け取った文字列を大文字に変換して戻り値に返す処理となっています。
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 SelectFunction
{
public class Function
{
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public string FunctionHandler(string input, ILambdaContext context)
{
return input?.ToUpper();
}
}
}
参考:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/csharp-package-cli.html
デプロイ
デプロイしてみます。
-
.csprojファイルがあるディレクトリに移動します。
-
dotnet restore
コマンドを実行します。 -
dotnet lambda deploy-function
を実行します。-
Enter AWS Region:
と表示されるので、デプロイ先のリージョンを入力。 -
Enter Function Name:
と表示されるので、作成したいLambda関数名を入力。 -
Select IAM Role that to provide AWS credentials to your code:
とIAMロールの一覧が表示されるので、使用するIAMロールを選択。
-
デプロイに成功すると、AWS Lambdaのコンソールに作成したLambda関数が表示されます。
AWS Lambda上でテスト
AWS LambdaコンソールでデプロイしたLambda関数を選択し、「テストイベントの設定」をクリックします。
「イベント名」欄に任意の名称を入力し、その下の編集エリアに引数に渡す情報をJsonで入力して保存ボタンをクリックします。
先ほど「イベント名」欄に入力した名前を選択してテストボタンをクリックすると、実行結果欄にFunction.csのFunction.FunctionHandler()メソッドの戻り値が表示されます。
Visual Studio for Macでソリューション化
Visual Studio for Macでコーディングやデバッグ実行をしたいのでソリューションを作成します。
まずは、空のソリューションを作成します。
プロジェクトの作成で作成されたディレクトリ構成に合わせてソリューションの場所を指定します。ディレクトリ構成はお好きにどうぞ。
ソリューションウィンドウでソリューション名を右クリック→[追加]→[既存のプロジェクト]を選択し、Lambdaプロジェクトとそのテストプロジェクトを追加します。
テストの実行
テストプロジェクトをスタートアッププロジェクトに設定します。
単体テストウィンドウを表示し、テストメソッドを右クリック→[テストのデバッグ]をクリックすると、テストメソッドをデバッグ実行できます。