AWS CDK を使用した C# Lambda 関数のデプロイ
AWS Cloud Development Kit (AWS CDK) は、最新のプログラミング言語と .NET などのフレームワークを使用して、クラウドインフラストラクチャをコードとして定義するためのオープンソースソフトウェア開発フレームワークです。AWS CDK プロジェクトを実行して AWS CloudFormation テンプレートを生成し、そのテンプレートを使用してコードをデプロイします。
AWS CDK を使用してサンプルの Hello World .NET アプリケーションを構築し、デプロイするには、以下のセクションの指示に従ってください。サンプルアプリケーションは、API Gateway エンドポイントと Lambda 関数で構成される基本的な API バックエンドを実装しています。エンドポイントに HTTP GET リクエストを送信すると、API Gateway によって Lambda 関数が呼び出されます。この関数は、リクエストを処理する Lambda インスタンスの IP アドレスと共に Hello World メッセージを返します。
前提条件
- .NET 8 SDK
-
.NET 8
SDK とランタイムをインストールします。 - AWS CDK バージョン 2
-
AWS CDK の最新バージョンをインストールする方法については、「AWS Cloud Development Kit (AWS CDK) v2 開発者ガイド」の「AWS CDK の開始方法」を参照してください。
AWS CDK サンプルアプリケーションをデプロイする
-
サンプルアプリケーションのプロジェクトディレクトリを作成して、そこに移動します。
mkdir hello-world cd hello-world
-
以下のコマンドを実行して、新しい AWS CDK アプリケーションを初期化します。
cdk init app --language csharp
このコマンドは、プロジェクトディレクトリに以下のファイルとディレクトリを作成します。
├── README.md ├── cdk.json └── src ├── HelloWorld │ ├── GlobalSuppressions.cs │ ├── HelloWorld.csproj │ ├── HelloWorldStack.cs │ └── Program.cs └── HelloWorld.sln
-
src
ディレクトリを開き、.NET CLI を使用して新しい Lambda 関数を作成します。これは、AWS CDK を使用してデプロイする関数です。この例では、lambda.EmptyFunction
テンプレートを使用して、HelloWorldLambda
という名前の Hello World 関数を作成します。cd src dotnet new lambda.EmptyFunction -n HelloWorldLambda
このステップ完了後のプロジェクトディレクトリ内のディレクトリ構造は、次のようになります。
├── README.md ├── cdk.json └── src ├── HelloWorld │ ├── GlobalSuppressions.cs │ ├── HelloWorld.csproj │ ├── HelloWorldStack.cs │ └── Program.cs ├── HelloWorld.sln └── HelloWorldLambda ├── src │ └── HelloWorldLambda │ ├── Function.cs │ ├── HelloWorldLambda.csproj │ ├── Readme.md │ └── aws-lambda-tools-defaults.json └── test └── HelloWorldLambda.Tests ├── FunctionTest.cs └── HelloWorldLambda.Tests.csproj
-
src/HelloWorld
ディレクトリのHelloWorldStack.cs
ファイルを開きます。ファイルの内容を次のコードに置き換えます。using Amazon.CDK; using Amazon.CDK.AWS.Lambda; using Amazon.CDK.AWS.Logs; using Constructs; namespace CdkTest { public class HelloWorldStack : Stack { internal HelloWorldStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { var buildOption = new BundlingOptions() { Image = Runtime.DOTNET_8.BundlingImage, User = "root", OutputType = BundlingOutput.ARCHIVED, Command = new string[]{ "/bin/sh", "-c", " dotnet tool install -g Amazon.Lambda.Tools"+ " && dotnet build"+ " && dotnet lambda package --output-package /asset-output/function.zip" } }; var helloWorldLambdaFunction = new Function(this, "HelloWorldFunction", new FunctionProps { Runtime = Runtime.DOTNET_8, MemorySize = 1024, LogRetention = RetentionDays.ONE_DAY, Handler = "HelloWorldLambda::HelloWorldLambda.Function::FunctionHandler", Code = Code.FromAsset("./src/HelloWorldLambda/src/HelloWorldLambda", new Amazon.CDK.AWS.S3.Assets.AssetOptions { Bundling = buildOption }), }); } } }
これは、アプリケーションコードをコンパイルしてバンドルするコードであり、Lambda 関数自体の定義でもあります。この
BundlingOptions
オブジェクトにより、zip ファイルの内容を生成するために使用される一連のコマンドと共に zip ファイルを作成できます。この場合、dotnet lambda package
コマンドは zip ファイルのコンパイルと生成に使用されます。 -
アプリケーションをデプロイするには、次のコマンドを実行します。
cdk deploy
-
.NET Lambda CLI を使用して、デプロイした Lambda 関数を呼び出します。
dotnet lambda invoke-function HelloWorldFunction -p "hello world"
-
テストの完了後、作成したリソースは、保持することを希望しない限り削除できます。リソースを削除するには、次のコマンドを実行します。
cdk destroy
次のステップ
AWS CDK を使用し、.NET を使用して Lambda 関数を構築し、デプロイする方法については、以下のリソースを参照してください。