.NET Lambda Global CLI を使用する - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

.NET Lambda Global CLI を使用する

.NET CLI および .NET Lambda Global Tools 拡張機能 (Amazon.Lambda.Tools) は、.NET ベースの Lambda アプリケーションを作成し、パッケージ化して、Lambda にデプロイするためのクロスプラットフォームな方法を提供します。このセクションでは、.NET CLI と Amazon Lambda テンプレートを使用して新しい Lambda .NET プロジェクトを作成する方法と、Amazon.Lambda.Tools を使用してそれらをパッケージ化してデプロイする方法を学習します。

前提条件

.NET 8 SDK

まだインストールしていない場合は、.NET 8 SDK とランタイムをインストールします。

AWS Amazon.Lambda.Templates .NET プロジェクトテンプレート

Lambda 関数コードを生成するには、Amazon.Lambda.Templates NuGet パッケージを使用します。このテンプレートパッケージをインストールするには、以下のコマンドを実行します。

dotnet new install Amazon.Lambda.Templates
AWS Amazon.Lambda.Tools .NET Global CLI Tools

Lambda 関数を作成するには、Amazon.Lambda.Tools .NET Global Tools 拡張機能を使用します。Amazon.Lambda.Tools をインストールするには、以下のコマンドを実行します。

dotnet tool install -g Amazon.Lambda.Tools

Amazon.Lambda.Tools .NET CLI 拡張機能の詳細については、GitHub の「AWS Extensions for .NET CLI」リポジトリを参照してください。

.NET CLI を使用して .NET プロジェクトを作成する

.NET CLI では、コマンドラインから .NET プロジェクトを作成するために dotnet new コマンドを使用します。Lambda には、Amazon.Lambda.Templates NuGet パッケージを使用する追加のテンプレートが用意されています。

このパッケージをインストールしたら、次のコマンドを実行して、使用可能なテンプレートのリストを表示します。

dotnet new list

テンプレートに関する詳細を確認するには、help オプションを使用します。例えば、lambda.EmptyFunction テンプレートの詳細を表示するには、以下のコマンドを実行します。

dotnet new lambda.EmptyFunction --help

.NET Lambda 関数の基本テンプレートを作成するには、lambda.EmptyFunction テンプレートを使用します。これにより、入力として文字列を受け取り、ToUpper メソッドを使用して大文字に変換する単純な関数が作成されます。このテンプレートでは、以下のオプションがサポートされています。

  • --name - 関数の名前。

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

  • --profile - AWS SDK for .NET 認証情報ファイルにあるプロファイルの名前。.NET の認証情報プロファイルの詳細については、「.NET 用 AWS SDK 開発者ガイド」の「AWS 認証情報を設定」を参照してください。

この例では、デフォルトのプロファイルと AWS リージョン設定を使用して、myDotnetFunction という名前の新しい空の関数を作成します。

dotnet new lambda.EmptyFunction --name myDotnetFunction

このコマンドは、プロジェクトディレクトリに以下のファイルとディレクトリを作成します。

└── myDotnetFunction ├── src │   └── myDotnetFunction │   ├── Function.cs │   ├── Readme.md │   ├── aws-lambda-tools-defaults.json │   └── myDotnetFunction.csproj └── test └── myDotnetFunction.Tests ├── FunctionTest.cs └── myDotnetFunction.Tests.csproj

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

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

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

    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 myDotnetFunction; 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(); } }
  • myDotnetFunction.csproj: アプリケーションを構成するファイルとアセンブリをリスト表示する MSBuild ファイル。

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <!-- This property makes the build directory similar to a publish directory and helps the AWS .NET Lambda Mock Test Tool find project dependencies. --> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!-- Generate ready to run images during publishing to improve cold start time. --> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.0" /> </ItemGroup> </Project>
  • Readme: このファイルを使用して Lambda 関数をドキュメント化します。

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

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

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

    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); } } }

.NET CLI を使用して .NET プロジェクトをデプロイする

デプロイパッケージを構築して Lambda にデプロイするには、Amazon.Lambda.Tools CLI ツールを使用します。前のステップで作成したファイルから関数をデプロイするには、まず、関数の .csproj ファイルが含まれるフォルダに移動します。

cd myDotnetFunction/src/myDotnetFunction

コードを .zip デプロイパッケージとして Lambda にデプロイするには、以下のコマンドを実行します。独自の関数名を選択してください。

dotnet lambda deploy-function myDotnetFunction

デプロイ中、ウィザードでは [Lambda 実行ロール] を選択するよう求められます。この例では、lambda_basic_role を選択します。

関数をデプロイしたら、dotnet lambda invoke-function コマンドを使用してクラウドでテストできます。lambda.EmptyFunction テンプレートのサンプルコードでは、--payload オプションを使用して文字列を渡すことで関数をテストできます。

dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK"

関数が正常にデプロイされると、以下のような出力が表示されます。

dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK" Amazon Lambda Tools for .NET Core applications (5.8.0) Project Home: https://github.com/aws/aws-extensions-for-dotnet-cli, https://github.com/aws/aws-lambda-dotnet 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: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB

.NET CLI で Lambda レイヤーを使用する

注記

C# のようなコンパイル済み言語の関数でレイヤーを使用しても、Python のようなインタープリター言語と同じメリットが得られない場合があります。C# はコンパイル済み言語なので、関数は初期化フェーズで共有アセンブリを手動でメモリに読み込む必要があり、コールドスタート時間が長くなる可能性があります。代わりに、コンパイル時にすべての共有コードを含めて、組み込みコンパイラ最適化機能を活用することをお勧めします。

.NET CLI では、レイヤーの公開や、レイヤーを使用する C# 関数のデプロイに役立つコマンドがサポートされています。指定した Amazon S3 バケットにレイヤーを公開するには、自身の .csproj と同じディレクトリで次のコマンドを実行します。

dotnet lambda publish-layer <layer_name> --layer-type runtime-package-store --s3-bucket <s3_bucket_name>

その後、.NET CLI を使用して関数をデプロイする際に、次のコマンドで使用するレイヤーの ARN を指定します。

dotnet lambda deploy-function <function_name> --function-layers arn:aws:lambda:us-east-1:123456789012:layer:layer-name:1

Hello World 関数の完全な例については、blank-csharp-with-layer のサンプルを参照してください。