亚马逊AWS官方博客

AWS Cloud Development Kit (CDK) – Java 和 .NET 现已正式发布

今天,我们很高兴地宣布,AWS Cloud Development Kit (CDK) 中的 Java 和 .NET 支持现已正式发布。AWS CDK 是一个开源软件开发框架,用于通过 AWS CloudFormation 建模和预置云应用程序资源。 AWS CDK 还提供对 TypeScript 和 Python 的支持。

借助 AWS CDK,您可以设计、创作和分享满足您独特需求的自定义资源。例如,您可以使用 AWS CDK 对 VPC 及其关联的路由和安全配置进行建模。然后,您可以将该代码包装到一个构件中,与组织的其余人员分享。通过这种方式,您可以开始构建这些构件的库,进而使用它们实现组织创建 AWS 资源方式的标准化。

借助 AWS CDK,您可以使用应用程序代码所用的相同编程语言,在自己喜欢的 IDE 中构建应用程序,包括基础架构。在用 .NET 或 Java 编写 AWS CDK 模型时,您将在代码完成和内联文档等方面获得生产力优势,从而可以更快地对基础架构进行建模。

AWS CDK 的工作原理
AWS CDK 中的一切都是一种构件 (construct)。您可以将构件想象成云组件,它代表任意复杂度的架构:Amazon Simple Storage Service (S3) 存储桶或 Amazon Simple Notification Service (SNS) 主题等单个资源、静态网站、甚至是覆盖多个 AWS 账户和区域的复杂多堆栈应用程序。 您可以将若干构件组合成堆栈(可以部署到 AWS 环境中)以及应用程序(一个或多个堆栈的集合)。

AWS CDK 包括 AWS 构件库,其中包含代表 AWS 资源的构件。

如何使用 AWS CDK
我将使用 AWS CDK 构建一个简单队列,但是与使用 YAML 或 JSON 手工制作 CloudFormation 模板不同,AWS CDK 允许我使用一种熟悉的编程语言来生成和部署 AWS CloudFormation 模板。

首先,我需要使用 NPM 安装 AWS CDK 命令行界面。下载完成后,我可以使用 TypeScript、Python、JavaScript、Java 或 .NET 对基础结构进行编码。

npm i -g aws-cdk

在本地计算机上,我创建一个新文件夹并导航至该位置。

mkdir cdk-newsblog-dotnet && cd cdk-newsblog-dotnet

现在,我已经安装了 CLI,可以执行 cdk init 之类的命令并传递语言切换,在本实例中,我使用的是 .NET,而示例应用程序带有 csharp 语言切换功能。

cdk init sample-app --language csharp

如果要使用 Java 而不是 .NET,可以将 --language 切换为 java

cdk init sample-app --language java

由于我在终端中,因此输入code .,这是在 VS Code 中打开当前文件夹的快捷方式。当然,您也可以使用任何编辑器,例如 Visual Studio 或 JetBrains Rider。如下所示,init 命令创建了一个基本的 .NET AWS CDK 项目。

如果我查看 Program.cs,则 Main void 将创建一个 App,然后创建一个 CDKDotnetStack。CDKDotnetStack.cs 文件中定义了此堆栈 CDKDotnetStack。这是项目的实质所在,并且定义了所有 AWS 资源。

CDKDotnetStack.cs 文件中,一些代码创建了一个 Amazon Simple Queue Service (SQS),然后创建了一个主题,最后将 Amazon Simple Notification Service (SNS) 订阅添加到该主题

现在,我已经编写了代码,下一步就是部署它。完成后,AWS CDK 将编译并执行此项目,将 .NET 代码转换为 AWS CloudFormation 模板。

如果我现在要立即部署它,我实际上不会看到 CloudFormation 模板,因此 AWS CDK 提供了一个命令 cdk synth,该命令可以接收我的应用程序,对其进行编译,执行并输出一个 CloudFormation 模板。

这只是标准的 CloudFormation,如果您仔细查看,将会发现以下各项:

  • AWS::SQS::Queue – 我添加的队列。
  • AWS::SQS::QueuePolicy – 一个 IAM 策略,允许我的主题将消息发送到我的队列。我实际上没有在代码中定义它,但是 AWS CDK 非常聪明,知道我需要其中之一,因此创建了一个。
  • AWS::SNS::Topic – 我创建的主题。
  • AWS::SNS::Subscription – 队列和主题之间的订阅。
  • AWS::CDK::Metadata 此部分是特别针对 AWS CDK 的,并由工具包自动添加到每个堆栈中。AWS CDK 团队使用它进行分析,并允许我们确定版本是否有任何问题。

在将该项目部署到我的 AWS 账户之前,我将使用 cdk bootstrapbootstrap 命令将为我创建一个 Amazon Simple Storage Service (S3) 存储桶,AWS CDK 将使用该存储桶来存储部署期间可能需要的任何资产。在此示例中,我没有使用任何资产,因此从技术上讲,我可以跳过此步骤。但是,从一开始就引导您的环境是个好习惯,因此,如果您选择使用资产,以后就不会出现部署错误。

我现在准备部署项目,为此我会执行以下命令 cdk deploy

该命令首先创建 AWS CloudFormation 模板,然后将其部署到我的账户中。由于我的项目将进行安全更改,因此它会询问我是否要部署这些更改。我选择“是”,然后创建 CloudFormation 变更集,并且我的资源开始构建。

完成后,我可以转到 CloudFormation 控制台,然后会看到所有资源现已成为 AWS CloudFormation 堆栈的一部分。

就这么简单,我已使用 .NET 在云中成功构建全部资源。

通过添加 Java 和 .NET,AWS CDK 现在总共支持 5 种编程语言,为您提供更多构建 AWS 资源的方式。为什么不立即安装 AWS CDK 并尝试使用您喜欢的任意一种语言呢?

— Martin