使用 Amazon Cloud Development Kit (Amazon CDK) - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Cloud Development Kit (Amazon CDK)

Amazon Cloud Development Kit (Amazon CDK) 是一个开源软件开发框架,用于将云基础设施定义为使用现代编程语言和框架(如 .NET)的代码。执行 Amazon CDK 项目是为了生成 Amazon CloudFormation 模板,然后使用这些模板来部署您的代码。

要使用 Amazon CDK 构建和部署示例 Hello world .NET 应用程序,请按照以下各节中的说明进行操作。示例应用程序实现了一个基本 API 后端,该后端由 API Gateway 端点和 Lambda 函数组成。在向端点发送 HTTP GET 请求时,API Gateway 会调用 Lambda 函数。该函数返回一条“Hello world”消息,以及处理您的请求的 Lambda 实例的 IP 地址。

先决条件

.NET 8 SDK

安装 .NET 8 SDK 和运行时系统。

Amazon CDK 版本 2

要了解如何安装最新版本的 Amazon CDK,请参阅 Amazon Cloud Development Kit (Amazon CDK) v2 开发人员指南中的 Amazon CDK 入门

部署示例 Amazon CDK 应用程序

  1. 为示例应用程序创建项目目录,并导航到该项目目录。

    mkdir hello-world cd hello-world
  2. 通过运行以下命令来初始化新的 Amazon CDK 应用程序。

    cdk init app --language csharp

    此命令在您的项目目录中创建以下文件和目录

    ├── README.md ├── cdk.json └── src ├── HelloWorld │   ├── GlobalSuppressions.cs │   ├── HelloWorld.csproj │   ├── HelloWorldStack.cs │   └── Program.cs └── HelloWorld.sln
  3. 打开 src 目录并使用 .NET CLI. 创建新的 Lambda 函数。这是您将使用 Amazon 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
  4. 打开 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 格式文件。

  5. 要部署应用程序,请运行以下命令。

    cdk deploy
  6. 使用 .NET Lambda CLI 调用已部署的 Lambda 函数。

    dotnet lambda invoke-function HelloWorldFunction -p "hello world"
  7. 除非您想要保留您创建的资源,否则在您完成测试后,可立即将其删除。请运行以下命令以删除您的资源。

    cdk destroy

后续步骤

要了解有关使用 Amazon CDK 借助 .NET 构建和部署 Lambda 函数的更多信息,请参阅以下资源: