AWS Lambda
開発者ガイド

.NET Core CLI

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

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

dotnet new -all

次のように表示されます。

dotnet new -all Usage: new [options] Options: -h, --help Displays help for this command. -l, --list Lists templates containing the specified name. If no name is specified, lists all templates. -n, --name The name for the output being created. If no name is specified, the name of the current directory is used. -o, --output Location to place the generated output. -i, --install Installs a source or a template pack. -u, --uninstall Uninstalls a source or a template pack. --nuget-source Specifies a NuGet source to use during install. --type Filters templates based on available types. Predefined values are "project", "item" or "other". --force Forces content to be generated even if it would change existing files. -lang, --language Filters templates based on language and specifies the language of the template to create. 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 Razor Page page [C#] Web/ASP.NET MVC ViewImports viewimports [C#] Web/ASP.NET MVC ViewStart viewstart [C#] Web/ASP.NET ASP.NET Core Empty web [C#], F# Web/Empty ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC ASP.NET Core Web App razor [C#] Web/MVC/Razor Pages ASP.NET Core with Angular angular [C#] Web/MVC/SPA ASP.NET Core with React.js react [C#] Web/MVC/SPA ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA Razor Class Library razorclasslib [C#] Web/Razor/Library/Razor Class Library ASP.NET Core Web API webapi [C#], F# Web/WebAPI global.json file globaljson Config NuGet Config nugetconfig Config Web Config webconfig Config Solution File sln Solution Examples: dotnet new mvc --auth Individual dotnet new viewstart dotnet new --help

したがって、たとえば、コンソールプロジェクトを作成するには、次を実行します。

  1. 次のコマンドを使用して、プロジェクトの作成先となるディレクトリを作成します。mkdir

  2. 次のコマンドを使用して、そのディレクトリに移動します。 cd

  3. 次のコマンドを入力します。dotnet new console -o myproject

    これにより、ディレクトリに次のファイルが作成されます。

    • Program.cs で、Lambda 関数のコードを作成します。

    • ファイルと .NET アプリケーションを構成する依存関係をリスト表示する XML ファイルである MyProject.csproj。

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

dotnet new -i Amazon.Lambda.Templates

インストールが完了すると、Lambda テンプレートは dotnet new の一部として表示されます。これを確認するには、次のコマンドを再度実行します。

dotnet new -all

これで、次が表示されます。

dotnet new -all Usage: new [options] Options: -h, --help Displays help for this command. -l, --list Lists templates containing the specified name. If no name is specified, lists all templates. -n, --name The name for the output being created. If no name is specified, the name of the current directory is used. -o, --output Location to place the generated output. -i, --install Installs a source or a template pack. -u, --uninstall Uninstalls a source or a template pack. --nuget-source Specifies a NuGet source to use during install. --type Filters templates based on available types. Predefined values are "project", "item" or "other". --force Forces content to be generated even if it would change existing files. -lang, --language Filters templates based on language and specifies the language of the template to create. Templates Short Name Language Tags --------------------------------------------------------------------------------------------------------------------------------------------------------- Order Flowers Chatbot Tutorial lambda.OrderFlowersChatbot [C#] AWS/Lambda/Function Lambda Detect Image Labels lambda.DetectImageLabels [C#], F# AWS/Lambda/Function Lambda Empty Function lambda.EmptyFunction [C#], F# AWS/Lambda/Function Lex Book Trip Sample lambda.LexBookTripSample [C#] AWS/Lambda/Function Lambda Simple DynamoDB Function lambda.DynamoDB [C#], F# AWS/Lambda/Function Lambda Simple Kinesis Firehose Function lambda.KinesisFirehose [C#] AWS/Lambda/Function Lambda Simple Kinesis Function lambda.Kinesis [C#], F# AWS/Lambda/Function Lambda Simple S3 Function lambda.S3 [C#], F# AWS/Lambda/Function Lambda ASP.NET Core Web API serverless.AspNetCoreWebAPI [C#], F# AWS/Lambda/Serverless Lambda ASP.NET Core Web Application with Razor Pages serverless.AspNetCoreWebApp [C#] AWS/Lambda/Serverless Serverless Detect Image Labels serverless.DetectImageLabels [C#], F# AWS/Lambda/Serverless Lambda DynamoDB Blog API serverless.DynamoDBBlogAPI [C#] AWS/Lambda/Serverless Lambda Empty Serverless serverless.EmptyServerless [C#], F# AWS/Lambda/Serverless Lambda Giraffe Web App serverless.Giraffe F# AWS/Lambda/Serverless Serverless Simple S3 Function serverless.S3 [C#], F# AWS/Lambda/Serverless Step Functions Hello World serverless.StepFunctionsHelloWorld [C#], F# AWS/Lambda/Serverless 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 Razor Page page [C#] Web/ASP.NET MVC ViewImports viewimports [C#] Web/ASP.NET MVC ViewStart viewstart [C#] Web/ASP.NET ASP.NET Core Empty web [C#], F# Web/Empty ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC ASP.NET Core Web App razor [C#] Web/MVC/Razor Pages ASP.NET Core with Angular angular [C#] Web/MVC/SPA ASP.NET Core with React.js react [C#] Web/MVC/SPA ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA Razor Class Library razorclasslib [C#] Web/Razor/Library/Razor Class Library ASP.NET Core Web API webapi [C#], F# Web/WebAPI global.json file globaljson Config NuGet Config nugetconfig Config Web Config webconfig Config Solution File sln Solution Examples: dotnet new mvc --auth Individual dotnet new viewimports --namespace dotnet new --help

特定のテンプレートに関する詳細を確認するには、次のコマンドを使用します。

dotnet new lambda.EmptyFunction --help

次の点に注意してください。

-p|--profile The AWS credentials profile set in aws-lambda-tools-defaults.json and used as the default profile when interacting with AWS. string - Optional -r|--region The AWS region set in aws-lambda-tools-defaults.json and used as the default region when interacting with AWS. string - Optional

これらは Lambda 関数を作成するときに設定できるオプションの値であり、関数作成プロセスの一部として構成される aws-lambda-tools-defaults.json ファイルに自動的に書き込まれます。以下にこれらの意味を説明します。

  • --profile: 実行ロール。

    IAM ロール (実行ロール) を作成するには

    1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

    2. IAM ユーザーガイド』の「IAM ロール」のステップに従って、IAM ロール (実行ロール) を作成します。ロールを作成するステップに従うときに、次のことに注意してください。

      • [Select Role Type] で、[AWS Service Roles] を選択して [AWS Lambda] を選択します。

      • [ポリシーのアタッチ] で Lambda 関数の要件に最適なポリシーを選択します。その他の AWS サービスと相互作用していない場合には、[AWSLambdaBasicExecutionRole] を選択できます。ただし、Lambda 関数が Kinesis と相互作用している場合には、[AWSLambdaKinesisExecutionRole] を選択します。

  • -region: 関数が存在する Amazon リージョン。

たとえば、Lambda 関数を作成するには、--region パラメータ値を選択するリージョンで置き換え、--profile を IAM プロファイルで置き換えて、次のコマンドを実行します。

注記

Lambda 関数の要件の詳細については、「CreateFunction」を参照してください。

dotnet new lambda.EmptyFunction --name MyFunction --profile default --region region

この場合、次のようなディレクトリ構造が作成されるはずです。

<dir>myfunction /src/myfunction /test/myfunction

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

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

    "profile":"iam profile"", "region" : "region", "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

Lambda 関数のシリアル化

Stream オブジェクト以外の入出力タイプを使用するすべての Lambda 関数には、アプリケーションにシリアル化ライブラリを追加する必要があります。これは以下の方法でできます。

  • Json.NET を使用します。Lambda は JSON.NET を NuGet パッケージとして使用する JSON シリアライザーの実装を提供します。

  • ILambdaSerializer インターフェイスの実装によって独自のシリアル化ライブラリを作成します。これは、Amazon.Lambda.Core ライブラリの一部として入手できます。インターフェイスは 2 つのメソッドを定義します。

    • T Deserialize<T>(Stream requestStream);

      このメソッドを実装して、Invoke API から Lambda 関数ハンドラーに渡されるオブジェクトにリクエストのペイロードを逆シリアル化することができます。

    • T Serialize<T>(T response, Stream responseStream);

      このメソッドを実装して、Lambda 関数ハンドラーから返される結果を Invoke API から返されたレスポンスペイロードにシリアル化することができます。

任意のシリアライザーを使用するため、MyProject.csproj ファイルに依存関係として追加します。

... <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="1.0.0" /> <PackageReference Include="Amazon.Lambda.Serialization.Json" Version="1.3.0" /> </ItemGroup>

次に、それを AssemblyInfo.cs ファイルに追加します。たとえば、デフォルトの Json.NET シリアライザーを使用している場合は、以下を追加します。

[assembly:LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

注記

メソッドレベルでカスタムシリアル化属性を定義することができます。それにより、アセンブリレベルで指定されたデフォルトのシリアライザーが上書きされます。詳細については、「標準のデータ型の処理」を参照してください。

このページの内容: