這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
標籤是您可以新增至 AWS CDK 應用程式中建構的資訊鍵值元素。套用至指定建構的標籤也會套用至其所有可標記的子系。標籤會包含在從您的應用程式合成的 AWS CloudFormation 範本中,並套用至其部署 AWS 的資源。您可以使用標籤來識別和分類資源,用於下列目的:
-
簡化管理
-
成本分配
-
存取控制
-
您設計的任何其他目的
提示
如需如何搭配 AWS 資源使用標籤的詳細資訊,請參閱AWS 白皮書中的標記 AWS 資源的最佳實務。
使用標籤
Tags
類別包含靜態方法 of()
,您可以透過此方法將標籤新增至指定的建構,或從中移除標籤。
-
Tags.of(
會將新標籤套用至指定的建構及其所有子系。SCOPE
).add() -
Tags.of(
會從指定的建構及其任何子系中移除標籤,包括子建構可能已套用至其本身的標籤。SCOPE
).remove()
注意
使用 實作標記Aspects 和 AWS CDK。Aspects 是將 操作 (例如標記) 套用至指定範圍內所有建構的一種方式。
下列範例會將具有 值的標籤索引鍵套用至建構。
Tags.of(myConstruct).add('key', 'value');
下列範例會從建構中刪除標籤金鑰。
Tags.of(myConstruct).remove('key');
如果您使用的是Stage
建構,請在Stage
關卡或以下套用標籤。標籤不會跨Stage
邊界套用。
標籤優先順序
會以遞迴方式 AWS CDK 套用和移除標籤。如果有衝突,具有最高優先順序的標記操作會獲勝。(優先順序是使用選用priority
屬性設定。) 如果兩個操作的優先順序相同,最接近建構樹底部的標記操作會獲勝。根據預設,套用標籤的優先順序為 100 (直接新增至 AWS CloudFormation 資源的標籤除外,其優先順序為 50)。移除標籤的預設優先順序為 200。
下列會將優先順序為 300 的標籤套用至建構。
Tags.of(myConstruct).add('key', 'value', {
priority: 300
});
可選屬性
標籤支援properties
微調標籤套用或移除資源的方式。所有屬性皆是選用。
applyToLaunchedInstances
(Python:apply_to_launched_instances
)-
僅適用於 add()。根據預設,標籤會套用至 Auto Scaling 群組中啟動的執行個體。將此屬性設定為 false,以忽略 Auto Scaling 群組中啟動的執行個體。
includeResourceTypes
/excludeResourceTypes
(Python:include_resource_types
/exclude_resource_types
)-
根據資源 AWS CloudFormation 類型,使用這些標籤僅在資源子集上操作標籤。根據預設,操作會套用至建構子樹狀結構中的所有資源,但可以透過包含或排除特定資源類型來變更。如果同時指定了兩者,則排除優先於包含 。
priority
-
使用此項目可設定此操作與其他
Tags.add()
和Tags.remove()
操作的優先順序。較高的值優先於較低的值。新增操作的預設值為 100 (直接套用至 AWS CloudFormation 資源的標籤為 50),移除操作為 200。
下列範例會將值為 且優先順序為 100 的標籤標籤名稱套用至建構中的 AWS::Xxx::Yyy 類型資源。它不會將標籤套用至在 Amazon EC2 Auto Scaling 群組中啟動的執行個體,或類型為 AWS::Xxx::Zzz 的資源。(這些是兩種任意 AWS CloudFormation 資源類型的預留位置。)
Tags.of(myConstruct).add('tagname', 'value', {
applyToLaunchedInstances: false,
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 100,
});
下列範例會從建構中 AWS::Xxx::Yyy類型的資源中移除優先順序為 200 的標籤標籤名稱,但不會從 AWS::Xxx::Zzz 類型的資源移除。
Tags.of(myConstruct).remove('tagname', {
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 200,
});
範例
下列範例會將具有值 TheBest 的標籤金鑰 StackType 新增至Stack
名為 的任何資源MarketingSystem
。然後,它會再次將其從 Amazon EC2 VPC 子網路以外的所有資源中移除。結果是只有子網路已套用標籤。
import { App, Stack, Tags } from 'aws-cdk-lib';
const app = new App();
const theBestStack = new Stack(app, 'MarketingSystem');
// Add a tag to all constructs in the stack
Tags.of(theBestStack).add('StackType', 'TheBest');
// Remove the tag from all resources except subnet resources
Tags.of(theBestStack).remove('StackType', {
excludeResourceTypes: ['AWS::EC2::Subnet']
});
下列程式碼會達成相同的結果。考慮哪種方法 (包含或排除) 可讓您的意圖更清楚。
Tags.of(theBestStack).add('StackType', 'TheBest',
{ includeResourceTypes: ['AWS::EC2::Subnet']});
標記單一建構
Tags.of(scope).add(key, value)
是將標籤新增至 中建構的標準方法 AWS CDK。它的樹狀行走行為,會在指定範圍內遞迴標記所有可標記的資源,幾乎總是您想要的。不過,有時您需要標記特定、任意的建構 (或建構)。
其中一個案例涉及套用標籤,其值衍生自要標記之建構的一些屬性。標準標記方法會以遞迴方式將相同的索引鍵和值套用至範圍內的所有相符資源。不過,這裡每個標記的建構的值可能不同。
標籤是使用 層面實作,而 CDK 會在您使用 指定的範圍內呼叫每個建構的標籤visit()
方法Tags.of(scope)
。我們可以Tag.visit()
直接呼叫 ,將標籤套用至單一建構。
new cdk.Tag(key, value).visit(scope);
您可以標記範圍內的所有建構,但讓標籤的值衍生自每個建構的屬性。若要這樣做,請撰寫一個 面向,並在該面向的 visit()
方法中套用標籤,如上述範例所示。然後,使用 將 面向新增至所需的範圍Aspects.of(scope).add(aspect)
。
下列範例會將標籤套用至包含資源路徑之堆疊中的每個資源。
class PathTagger implements cdk.IAspect {
visit(node: IConstruct) {
new cdk.Tag("aws-cdk-path", node.node.path).visit(node);
}
}
stack = new MyStack(app);
cdk.Aspects.of(stack).add(new PathTagger())
提示
有條件標記的邏輯,包括優先順序、資源類型等,都內建在 Tag
類別中。您可以在將標籤套用至任意資源時使用這些功能;如果不符合條件,則不會套用標籤。此外,Tag
類別只會標記可標記的資源,因此您不需要在套用標籤之前測試建構是否可標記。