这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
方面是一种将操作应用于给定范围内所有构造的方法。方面可以通过添加标签等方式修改构造。或者可以验证一些有关构造状态的信息,例如确保所有存储桶均已加密。
要将某方面应用于相同范围内的一个构造和所有构造,请使用新方面调用 Aspects
.of(
,如以下示例所示。SCOPE
).add()
Aspects.of(myConstruct).add(new SomeAspect(...));
AWS CDK 使用方面来标记资源,但框架也可以用于其他目的。例如,您可以使用它来验证或更改由更高级别的构造为您定义的 AWS CloudFormation 资源。
方面详细说明
方面采用访客模式
interface IAspect {
visit(node: IConstruct): void;}
在调用 Aspects.of(
时,构造会将方面添加到内部方面列表中。您可以通过 SCOPE
).add(...)Aspects.of(
获取列表。SCOPE
)
在准备阶段,按自上而下的顺序为构造及其每个子对象 AWS CDK 调用对象visit
的方法。
visit
方法可以自由更改构造中的任何内容。在强类型语言中,在访问特定于构造的属性或方法之前,将接收到的构造转换为更具体的类型。
方面不会跨 Stage
构造边界传播,因为定义之后 Stages
独立且不可变。若希望方面访问 Stage
内部构造,则将方面应用于 Stage
构造本身(或更低版本)。
示例
以下示例验证堆栈中创建的所有存储桶是否均启用版本控制。方面为验证失败的构造添加错误注释。这会导致 synth 操作失败并防止部署生成的云程序集。
class BucketVersioningChecker implements IAspect {
public visit(node: IConstruct): void {
// See that we're dealing with a CfnBucket
if (node instanceof s3.CfnBucket) {
// Check for versioning property, exclude the case where the property
// can be a token (IResolvable).
if (!node.versioningConfiguration
|| (!Tokenization.isResolvable(node.versioningConfiguration)
&& node.versioningConfiguration.status !== 'Enabled')) {
Annotations.of(node).addError('Bucket versioning is not enabled');
}
}
}
}
// Later, apply to the stack
Aspects.of(stack).add(new BucketVersioningChecker());