使用 AWS CDK 部署 C# Lambda 函數
AWS Cloud Development Kit (AWS CDK) 是開放原始碼軟體開發架構,用於透過現代程式設計語言和 .NET 等架構,將雲端基礎架構定義為程式碼。系統會執行 AWS CDK 專案以產生 CloudFormation 範本,然後用來部署程式碼。
若要使用 AWS CDK 建置和部署範例 Hello world .NET 應用程式,請依照下列各節的指示操作。範例應用程式會實作基本 API 後端 (包含 API Gateway 端點和 Lambda 函數)。當您傳送 HTTP GET 請求至端點時,API Gateway 會調用 Lambda 函數 此函數會傳回 Hello world 訊息,以及處理您請求之 Lambda 執行個體的 IP 地址。
必要條件
- .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 函數,請參閱下列資源: