使用 AWS CDK 部署 C# Lambda 函数
AWS Cloud Development Kit (AWS CDK) 是一个开源软件开发框架,用于将云基础设施定义为使用现代编程语言和框架(如 .NET)的代码。执行 AWS CDK 项目是为了生成 AWS 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 函数的更多信息,请参阅以下资源: