這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Aspects 是將 操作套用至指定範圍內所有建構體的一種方式。方面可以修改建構,例如新增標籤。或者,它可以驗證有關建構的狀態,例如確保所有儲存貯體都已加密。
若要將 面向套用至相同範圍內的建構和所有建構,請呼叫 Aspects
.of(
並搭配新面向,如下列範例所示。SCOPE
).add()
Aspects.of(myConstruct).add(new SomeAspect(...));
AWS CDK 使用 面向來標記資源,但架構也可以用於其他用途。例如,您可以使用它來驗證或變更高階建構為您定義的 AWS CloudFormation 資源。
面向詳細資訊
Aspects 採用訪客模式
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());