添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
AWS CDK 在 Java 中使用 - AWS Cloud Development Kit (AWS CDK) v2

这是 AWS CDK v2 开发者指南。较旧的 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。

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

AWS CDK 在 Java 中使用

Java 是完全支持的客户端语言 AWS CDK ,被认为是稳定的。你可以使用熟悉的工具用 Java 开发 AWS CDK 应用程序,包括 JDK(甲骨文的,或者像 Amazon Corretto 这样的 OpenJDK 发行版)和 Apache Maven。

AWS CDK 支持 Java 8 及更高版本。但是,我们建议您尽量使用最新版本,因为该语言的更高版本包含了特别便于开发 AWS CDK 应用程序的改进。例如,Java 9 引入了该 Map.of() 方法(一种声明哈希映射的便捷方法,该哈希映射将在中 TypeScript写成对象文字)。Java 10 使用 var 关键字引入了局部类型推断。

注意

本开发人员指南中的大多数代码示例都适用于 Java 8。有几个示例使用 Map.of() ;这些示例包括注释,指出它们需要 Java 9。

您可以使用任何文本编辑器或可以读取 Maven 项目的 Java IDE 来处理您的 AWS CDK 应用程序。我们在本指南中提供了 Eclipse 提示,但是 IntelliJ IDEA 和其他 IDE 可以导入 Maven 项目,并且可以用来在 Java 中开发应用程序。 NetBeans AWS CDK

可以用 Jvm 托管的语言(例如 Kotlin、Groovy、Clojure 或 Scala)编写 AWS CDK 应用程序,但这种体验可能不是特别习惯,我们无法为这些语言提供任何支持。

开始使用 Java

要使用 AWS CDK,您必须拥有 AWS 账户和凭证,并已安装 Node.js 和 AWS CDK Toolkit。请参阅 开始使用 AWS CDK

Java AWS CDK 应用程序需要 Java 8 (v1.8) 或更高版本。 我们推荐 Amazon Cor retto,但你可以使用任何 OpenJDK 发行版或 Oracle 的 JDK。 你还需要使用 Apache Maven 3.5 或更高版本。你也可以使用诸如 Gradle 之类的工具,但是 AWS CDK Toolkit 生成的应用程序框架是 Maven 项目。

注意

第三方语言弃用:语言版本仅在供应商或社区共享的 EOL(生命周期结束)之前才受支持,如有更改,恕不另行通知。

您可以通过在空目录 cdk init 中调用来创建新 AWS CDK 项目。使用该 --language 选项并指定 java

mkdir my-project cd my-project cdk init app --language java

cdk init 使用项目文件夹的名称来命名项目的各种元素,包括类、子文件夹和文件。文件夹名称中的连字符将转换为下划线。但是,除此之外,名称应遵循 Java 标识符的形式;例如,它不应以数字开头或包含空格。

生成的项目包括对 software.amazon.awscdk Maven 包的引用。它及其依赖项由 Maven 自动安装。

如果您使用的是 IDE,则现在可以打开或导入项目。例如,在 Eclipse 中,选择 “ 文件 ” > “ 导入 ” > “Maven” > “ 现有 Maven 项目”。确保将项目设置设置为使用 Java 8 (1.8)。

管理 AWS 构造库模块

使用 Maven 安装组 software.amazon.awscdk 中的 AWS 构造库软件包。大多数构造都在构件中,默认情况下 aws-cdk-lib ,该构件会添加到新的 Java 项目中。仍在开发更高级别 CDK 支持的服务的模块位于单独的 “实验性” 包中,并以其服务名称的简短版本(无或 AWS Amazon 前缀)命名。 搜索 Maven 中央存储库 以查找所有库 AWS CDK 和 AWS 构造模块库的名称。

注意

Java 版本的 CDK API 参考 还显示了软件包名称。

某些服务的 AWS 构造库支持位于多个命名空间中。例如,Amazon Route 53 的功能分为 software.amazon.awscdk.route53 route53-patterns route53resolver 、、和 route53-targets

主 AWS CDK 包以 Java 代码导入为 software.amazon.awscdk 。 AWS 构造库中各种服务的模块位于其下,其命名 software.amazon.awscdk.services 与它们的 Maven 包名称类似。例如,Amazon S3 模块的命名空间是 software.amazon.awscdk.services.s3

我们建议您为每个 Java 源文件中使用的每个 C AWS onstruct Library 类编写单独的 Java import 语句,并避免导入通配符。您始终可以在不使用 import 语句的情况下使用类型的完全限定名称(包括其命名空间)。

如果您的应用程序依赖于实验包,请编辑您的项目 pom.xml 并在 <dependencies> 容器中添加新 <dependency> 元素。例如,以下 <dependency> 元素指定了 CodeStar 实验构造库模块:

<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>codestar-alpha</artifactId> <version>2.0.0-alpha.10</version> </dependency>
提示

如果你使用 Java IDE,它可能具有管理 Maven 依赖关系的功能。但是,除非你完全确定 IDE 的功能与你手动操作的功能相匹配,否则我们建议你 pom.xml 直接进行编辑。

在中管理依赖关系 Java

在 Java 中,依赖关系是在 Maven 中指定 pom.xml 并使用 Maven 安装的。 <dependencies> 容器包含每个包的 <dependency> 元素。以下是典型的 pom.xml CDK Java 应用程序的部分。

<dependencies> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>aws-cdk-lib</artifactId> <version>2.14.0</version> </dependency> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>appsync-alpha</artifactId> <version>2.10.0-alpha.0</version> </dependency> </dependencies>
提示

许多 Java IDE 都集成了 Maven 支持和可视化 pom.xml 编辑器,您可能会发现它们便于管理依赖关系。

Maven 不支持依赖项锁定。尽管可以在中指定版本范围 pom.xml ,但我们建议您始终使用精确的版本,以保持构建的可重复性。

Maven 会自动安装传递依赖项,但每个软件包只能安装一个副本。选择在 POM 树中指定的最高版本;应用程序总是决定安装哪个版本的软件包。

每当你构建 ( mvn compile ) 或打包 ( mvn package ) 项目时,Maven 都会自动安装或更新你的依赖项。每次运行 CDK Toolkit 时,它都会自动执行此操作,因此通常无需手动调用 Maven。

AWS CDK Java 中的成语

所有 C AWS onstruct Library 类都使用三个参数进行实例化:定义构造的 作用域 (构造树中的父级)、 id props (构造函数用来配置其创建的资源的键/值对)。其他类和方法也使用 “属性包” 模式作为参数。

在 Java 中,道具是使用 生成器模式 表示的。每种构造类型都有相应的道具类型;例如, Bucket 构造(代表 Amazon S3 存储桶)将的实例作为其道具。 BucketProps

BucketProps 类(就像每个 Constru AWS ct Library 道具类一样)有一个名 Builder 为的内部类。该 BucketProps.Builder 类型提供了设置 BucketProps 实例各种属性的方法。每个方法都返回 Builder 实例,因此可以链接方法调用以设置多个属性。在链的尽头,你调 build() 用实际生成 BucketProps 对象。

Bucket bucket = new Bucket(this, "MyBucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());

构造和其他以类似 props 的对象作为最终参数的类提供了捷径。该类有自己 Builder 的,可以一步实例化它和它的 props 对象。这样,你就不必显式实例化(例如) BucketProps 和 a Bucket ,也不需要导入 props 类型。

Bucket bucket = Bucket.Builder.create(this, "MyBucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();

从现有构造派生自己的构造时,可能需要接受其他属性。我们建议您遵循这些构建器模式。但是,这并不像子类化构造类那么简单。你必须自己提供这两个新 Builder 职业的活动部分。你可能更愿意让你的构造接受一个或多个额外的参数。如果参数是可选的,则应提供其他构造函数。

在某些 API 中, AWS CDK 使用 JavaScript 数组或非类型化对象作为方法的输入。(例如, AWS CodeBuild参见 BuildSpec.fromObject() 的方法。) 在 Java 中,这些对象表示为 java.util.Map<String, Object> 。如果值都是字符串,则可以使用 Map<String, String>

Java 不像其他一些语言那样提供为此类容器编写文字的方法。在 Java 9 及更高版本中 java.util.Map.of() ,您可以使用其中一个调用方便地定义多达十个条目的映射。

java.util.Map.of( "base-directory", "dist", "files", "LambdaStack.template.json"

要创建包含十个以上条目的地图,请使用java.util.Map.ofEntries()

如果您使用的是 Java 8,则可以提供与这些方法类似的自己的方法。

JavaScript 数组在 Java List<String> 中以List<Object>或的形式表示。该方法便java.util.Arrays.asList于定义短 List s。

List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")

构建、合成和部署

在运行您的应用程序之前 AWS CDK 会自动对其进行编译。但是,手动构建应用程序以检查错误和运行测试可能会很有用。您可以在 IDE 中执行此操作(例如,在 Eclipse 中按 Control-B),也可以在项目的根目录中mvn compile在命令提示符下发出命令来执行此操作。

在命令提示符mvn test下运行您编写的所有测试。

可以使用以下命令合成 AWS CDK 应用程序中定义的堆栈并单独或一起部署。通常,当你发布它们时,你应该在项目的主目录中。

cdk synth:从应用程序中的一个或多个堆栈中 AWS CDK 合成一个 AWS CloudFormation 模板。

cdk deploy:将您的 AWS CDK 应用程序中的一个或多个堆栈定义的资源部署到。 AWS

您可以在单个命令中指定要合成或部署的多个堆栈的名称。如果您的应用程序只定义了一个堆栈,则无需指定该堆栈。

cdk synth # app defines single stack cdk deploy Happy Grumpy # app defines two or more stacks; two are deployed

您也可以使用通配符 *(任意数量的字符)和? (任何单个字符),用于按模式识别堆栈。使用通配符时,请用引号将模式括起来。否则,在将文件传递到 T AWS CDK oolkit 之前,shell 可能会尝试将其扩展为当前目录中的文件名。

cdk synth "Stack?" # Stack1, StackA, etc. cdk deploy "*Stack" # PipeStack, LambdaStack, etc.
提示

在部署堆栈之前,您无需显式合成堆栈;请cdk