这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在构建 AWS Cloud Development Kit (AWS CDK) 应用程序时,您将使用多种类型的标识符和名称。为了 AWS CDK 有效使用标识符并避免错误,了解标识符的类型非常重要。
标识符在创建其的作用域内必须是唯一的;它们在 AWS CDK 应用程序中不必是全局唯一的。
如果您尝试在同一范围内创建具有相同值的标识符,则会 AWS CDK 引发异常。
构造 IDs
最常见的标识符 id
是在实例化构造对象时作为第二个参数传递的标识符。与所有标识符一样,此标识符只需要在创建它的作用域内是唯一的,该作用域是实例化构造对象时的第一个参数。
注意
堆栈的 id
的也是您在 AWS CDK CLI 参考 中用来对其进行引用的标识符。
我们来看一个示例,其中我们的应用程序中有两个带有标识符 MyBucket
的构造。第一个是在堆栈的作用域中定义的,标识符为 Stack1
。第二个是在堆栈的作用域中定义的,标识符为 Stack2
。因为它们是在不同的作用域中定义的,所以这不会造成任何冲突,而且它们可以共存于同一个应用程序中而不会导致问题。
import { App, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
class MyStack extends Stack {
constructor(scope: Construct, id: string, props: StackProps = {}) {
super(scope, id, props);
new s3.Bucket(this, 'MyBucket');
}
}
const app = new App();
new MyStack(app, 'Stack1');
new MyStack(app, 'Stack2');
路径
AWS CDK 应用程序中的构造形成了植根于该App
类的层次结构。我们将 IDs 从给定构造、其父构造、其祖父构造等到构造树根部的集合称为路径。
AWS CDK 通常将模板中的路径显示为字符串。各个关卡之间用斜线隔开, IDs 从根实例正下方的节点开始,根App
实例通常是堆栈。例如,在前面的代码示例中,两个 Amazon S3 存储桶资源的路径分别是 Stack1/MyBucket
和 Stack2/MyBucket
。
您能以编程方式访问任何构造的路径,如以下示例所示。这会得到路径 myConstruct
(Python:my_construct
)。由于它们在创建的范围内 IDs 必须是唯一的,因此它们的路径在 AWS CDK 应用程序中始终是唯一的。
const path: string = myConstruct.node.path;
独特 IDs
AWS CloudFormation 要求模板 IDs 中的所有逻辑都必须是唯一的。因此, AWS CDK 必须能够为应用程序中的每个构造生成唯一标识符。资源的路径是全局唯一的(从堆栈到特定资源的所有作用域的名称)。因此,通过连接路径的元素并添加一个 8 位数的哈希来 AWS CDK 生成必要的唯一标识符。(哈希值是区分不同路径(例如A/B/C
和)所必需的A/BC
,因为这些路径会生成相同的 AWS CloudFormation 标识符。 AWS CloudFormation
标识符是字母数字,不能包含斜杠或其他分隔符。) AWS CDK 称此字符串为构造的唯一 ID。
通常,您的 AWS CDK 应用程序不需要知道唯一性 IDs。但是,您能以编程方式访问任何构造的唯一 ID,如以下示例所示。
const uid: string = Names.uniqueId(myConstruct);
地址是另一种用于唯一区分 CDK 资源的唯一标识符。它源自路径的 SHA-1 哈希值,人类不可读。但是,长度恒定、相对较短(始终为 42 个十六进制字符)的特点使其在“传统”唯一 ID 可能过长的情况下非常有用。某些构造可能会使用合成 AWS CloudFormation 模板中的地址而不是唯一 ID。同样,您的应用程序通常不需要知道其构造的地址,但您可以按如下方式检索构造的地址。
const addr: string = myConstruct.node.addr;
逻辑 IDs
在 IDs 为代表 AWS 资源的构造生成的 AWS CloudFormation 模板中,unique 用作资源的逻辑标识符(或逻辑名称)。
例如,上一个示例中在 Stack2
中创建的 Amazon S3 存储桶会生成一个 AWS::S3::Bucket
资源。资源的逻辑 ID Stack2MyBucket4DD88B4F
位于生成的 AWS CloudFormation 模板中。(有关如何生成此标识符的详细信息,请参阅独特 IDs。)
逻辑 ID 的稳定性
避免在资源创建后更改其逻辑 ID。 AWS CloudFormation 通过资源的逻辑 ID 来标识资源。因此,如果您更改资源的逻辑 ID,则使用新的逻辑 ID AWS CloudFormation 创建新资源,然后删除现有资源。根据资源的类型,这可能会导致服务中断或数据丢失,或同时导致这两种问题。