AWS Lambda
開発者ガイド

.NET Core CLI

.NET Core CLI では、クロスプラットフォームで .NET ベースの Lambda アプリケーションを作成することができます。このセクションでは、.NET Core CLI がインストールされていることを確認します。インストールしていない場合は、ここで行います。

.NET CLI では、コマンドラインから .NET プロジェクトを作成するために new コマンドを使用します。これは、Visual Studio 以外でプロジェクトを作成する場合に便利です。使用可能なプロジェクトタイプのリストを表示するには、コマンドラインを開いて .NET Core ランタイムをインストールした場所に移動し、以下のコマンドを入力します。

dotnet new -all Usage: new [options] ... Templates Short Name Language Tags ---------------------------------------------------------------------------------------------------------------------------- Console Application console [C#], F#, VB Common/Console Class library classlib [C#], F#, VB Common/Library Unit Test Project mstest [C#], F#, VB Test/MSTest xUnit Test Project xunit [C#], F#, VB Test/xUnit ... Examples: dotnet new mvc --auth Individual dotnet new viewstart dotnet new --help

AWS Lambda は、Amazon.Lambda.Templates nuget パッケージで追加のテンプレートを提供しています。次のコマンドを実行して、このパッケージをインストールします。

dotnet new -i Amazon.Lambda.Templates

インストールが完了すると、Lambda テンプレートは dotnet new の一部として表示されます。テンプレートに関する詳細を確認するには、help オプションを使用します。

dotnet new lambda.EmptyFunction --help

この lambda.EmptyFunction テンプレートは、以下のオプションをサポートします。

  • --name (必須) – ストリームの名前。

  • --profileAWS SDK for .NET認証情報ファイルにあるプロファイルの名前。

  • --region – 関数を作成する AWS リージョン。

これらのオプションは、aws-lambda-tools-defaults.json という名前のファイルに保存されます。

関数プロジェクトを lambda.EmptyFunction テンプレートを使用して作成します。

dotnet new lambda.EmptyFunction --name MyFunction

src/myfunction ディレクトリで次のファイルを調べます。

  • aws-lambda-tools-defaults.json: これは、Lambda 関数をデプロイするときに指定するコマンドラインオプションの場所です。例:

    "profile" : "default", "region" : "us-east-2", "configuration" : "Release", "framework" : "netcoreapp2.1", "function-runtime":"dotnetcore2.1", "function-memory-size" : 256, "function-timeout" : 30, "function-handler" : "MyFunction::MyFunction.Function::FunctionHandler"
  • Function.cs: Lambda ハンドラー関数コード。これは、デフォルトの Amazon.Lambda.Coreライブラリ とデフォルトの LambdaSerializer 属性が含まれる C# テンプレートです。要件とオプションのシリアル化に関する詳細は、「Lambda 関数のシリアル化」を参照してください。また、これには Lambda 関数コードに適用するために編集できるサンプル関数も含まれています。

    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; 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.Json.JsonSerializer))] namespace MyFunction { public class Function { public string FunctionHandler1(string input, ILambdaContext context) { return input?.ToUpper(); } } }
  • MyFunction.csproj: アプリケーションを構成するファイルとアセンブリをリスト表示する MSBuild ファイル。

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="1.0.0 " /> <PackageReference Include="Amazon.Lambda.Serialization.Json" Version="1.3.0" /> </ItemGroup> </Project>
  • Readme: このファイルを使用して Lambda 関数をドキュメントします。

myfunction/test directory, examine the following files:

  • myFunction.Tests.csproj: 上記で説明したように、これは、テストプロジェクトを構成するファイルとアセンブリをリスト表示する MSBuild ファイルです。また、これには、関数をテストするために必要なすべての Lambda テンプレートを継続的に統合できる Amazon.Lambda.Core ライブラリが含まれていることに注目してください。

    <Project Sdk="Microsoft.NET.Sdk"> ... <PackageReference Include="Amazon.Lambda.Core" Version="1.0.0 " /> ...
  • FunctionTest.cs: src ディレクトリに含まれているのと同様の C# コードテンプレートファイルです。このファイルを編集して、関数の本番稼働コードを写し、本番稼働環境に Lambda 関数をアップロードする前にそれをテストできます。

    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Xunit; using Amazon.Lambda.Core; using Amazon.Lambda.TestUtilities; using MyFunction; namespace MyFunction.Tests { public class FunctionTest { [Fact] public void TestToUpperFunction() { // Invoke the lambda function and confirm the string was upper cased. var function = new Function(); var context = new TestLambdaContext(); var upperCase = function.FunctionHandler("hello world", context); Assert.Equal("HELLO WORLD", upperCase); } } }

関数のテストに成功したら、Amazon.Lambda.Tools .NET Core Global Tool を使用して構築およびデプロイを実行できます。.NET Core Global Tool をインストールするには、次のコマンドを実行します。

dotnet tool install -g Amazon.Lambda.Tools

ツールがすでにインストールされている場合は、次のコマンドで最新バージョンを使用していることが確認できます。

dotnet tool update -g Amazon.Lambda.Tools

Amazon.Lambda.Tools .NET Core Global についての詳細は、「GitHub レポジトリ」を参照してください。

Amazon.Lambda.Tools がインストールされたら、次のコマンドを使用して関数をデプロイできます。

dotnet lambda deploy-function MyFunction –-function-role role

デプロイ後には、次のコマンドで本番稼働環境における再テストを行い、Lambda 関数ハンドラーに異なる値を渡すことができます。

dotnet lambda invoke-function MyFunction --payload "Just Checking If Everything is OK"

すべてが正常に行われたと想定すると、以下が表示されます。

dotnet lambda invoke-function MyFunction --payload "Just Checking If Everything is OK" Payload: "JUST CHECKING IF EVERYTHING IS OK" Log Tail: START RequestId: id Version: $LATEST END RequestId: id REPORT RequestId: id Duration: 0.99 ms Billed Duration: 100 ms Memory Size: 256 MB Max Memory Used: 12 MB