Tagging - AWS Cloud Development Kit (AWS CDK) v2

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 gewartet und der Support wurde am 1. Juni 2023 eingestellt.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tagging

Tags sind informative Schlüsselwertelemente, die Sie zu Konstrukten in Ihrer App hinzufügen können. AWS CDK Ein Tag, der auf ein bestimmtes Konstrukt angewendet wird, gilt auch für alle seine markierbaren untergeordneten Objekte. Tags sind in der AWS CloudFormation Vorlage enthalten, die aus Ihrer App synthetisiert wurde, und werden auf die AWS Ressourcen angewendet, die sie bereitstellt. Sie können Tags verwenden, um Ressourcen für die folgenden Zwecke zu identifizieren und zu kategorisieren:

  • Vereinfachung der Verwaltung

  • Kostenzuordnung

  • Zugriffskontrolle

  • Alle anderen Zwecke, die Sie sich ausdenken

Tipp

Weitere Informationen darüber, wie Sie Tags mit Ihren AWS Ressourcen verwenden können, finden Sie im Whitepaper unter Best Practices für das AWS Tagging von AWS Ressourcen.

Verwenden von Markierungen

Die TagsKlasse umfasst die statische Methodeof(), mit der Sie dem angegebenen Konstrukt Tags hinzufügen oder Tags daraus entfernen können.

  • Tags.of(SCOPE).add()wendet ein neues Tag auf das angegebene Konstrukt und alle seine untergeordneten Objekte an.

  • Tags.of(SCOPE).remove()entfernt ein Tag aus dem angegebenen Konstrukt und allen seinen untergeordneten Objekten, einschließlich Tags, die ein untergeordnetes Konstrukt möglicherweise auf sich selbst angewendet hat.

Anmerkung

Das Tagging wird implementiert mitAspekte. Aspekte sind eine Möglichkeit, eine Operation (z. B. Tagging) auf alle Konstrukte in einem bestimmten Bereich anzuwenden.

Im folgenden Beispiel wird der Tag-Schlüssel mit dem Wertwert auf ein Konstrukt angewendet.

TypeScript
Tags.of(myConstruct).add('key', 'value');
JavaScript
Tags.of(myConstruct).add('key', 'value');
Python
Tags.of(my_construct).add("key", "value")
Java
Tags.of(myConstruct).add("key", "value");
C#
Tags.Of(myConstruct).Add("key", "value");
Go
awscdk.Tags_Of(myConstruct).Add(jsii.String("key"), jsii.String("value"), &awscdk.TagProps{})

Im folgenden Beispiel wird der Tag-Schlüssel aus einem Konstrukt gelöscht.

TypeScript
Tags.of(myConstruct).remove('key');
JavaScript
Tags.of(myConstruct).remove('key');
Python
Tags.of(my_construct).remove("key")
Java
Tags.of(myConstruct).remove("key");
C#
Tags.Of(myConstruct).Remove("key");
Go
awscdk.Tags_Of(myConstruct).Remove(jsii.String("key"), &awscdk.TagProps{})

Wenn Sie Stage Konstrukte verwenden, wenden Sie das Tag auf der Stage Ebene oder darunter an. Beschriftungen werden nicht Stage grenzübergreifend angewendet.

Tag-Prioritäten

Der AWS CDK wendet Tags rekursiv an und entfernt sie. Bei Konflikten gewinnt der Tagging-Vorgang mit der höchsten Priorität. (Prioritäten werden mithilfe der optionalen priority Eigenschaft festgelegt.) Wenn die Prioritäten von zwei Operationen identisch sind, gewinnt die Tagging-Operation, die sich am Ende des Konstruktionsbaums am nächsten befindet. Standardmäßig hat das Anwenden eines Tags eine Priorität von 100 (mit Ausnahme von direkt zu einer AWS CloudFormation Ressource hinzugefügten Tags, die eine Priorität von 50 haben). Die Standardpriorität für das Entfernen eines Tags ist 200.

Im Folgenden wird ein Tag mit der Priorität 300 auf eine Konstruktion angewendet.

TypeScript
Tags.of(myConstruct).add('key', 'value', { priority: 300 });
JavaScript
Tags.of(myConstruct).add('key', 'value', { priority: 300 });
Python
Tags.of(my_construct).add("key", "value", priority=300)
Java
Tags.of(myConstruct).add("key", "value", TagProps.builder() .priority(300).build());
C#
Tags.Of(myConstruct).Add("key", "value", new TagProps { Priority = 300 });
Go
awscdk.Tags_Of(myConstruct).Add(jsii.String("key"), jsii.String("value"), &awscdk.TagProps{ Priority: jsii.Number(300), })

Optionale Eigenschaften

Mithilfe von propertiesStichwörtern können Sie genau festlegen, wie Tags auf Ressourcen angewendet oder aus Ressourcen entfernt werden. Alle anderen Eigenschaften sind optional.

applyToLaunchedInstances(Python:apply_to_launched_instances)

Nur für add () verfügbar. Standardmäßig werden Tags auf Instances angewendet, die in einer Auto Scaling Scaling-Gruppe gestartet wurden. Setzen Sie diese Eigenschaft auf false, um Instances zu ignorieren, die in einer Auto Scaling Scaling-Gruppe gestartet wurden.

includeResourceTypes/excludeResourceTypes(Python:include_resource_types/exclude_resource_types)

Verwenden Sie diese, um Tags nur für eine Teilmenge von Ressourcen zu manipulieren, basierend auf AWS CloudFormation Ressourcentypen. Standardmäßig wird die Operation auf alle Ressourcen im Konstruktionsunterbaum angewendet. Dies kann jedoch geändert werden, indem bestimmte Ressourcentypen ein- oder ausgeschlossen werden. Exclude hat Vorrang vor Include, wenn beide angegeben sind.

priority

Verwenden Sie diese Option, um die Priorität dieser Operation im Vergleich zu anderen Tags.add() Tags.remove() AND-Vorgängen festzulegen. Höhere Werte haben Vorrang vor niedrigeren Werten. Die Standardeinstellung ist 100 für Hinzufügevorgänge (50 für direkt auf AWS CloudFormation Ressourcen angewendete Tags) und 200 für Entfernungsvorgänge.

Im folgenden Beispiel wird der Tagname mit dem Wert Wert und der Priorität 100 auf Ressourcen des Typs AWS::Xxx::Yyyim Konstrukt angewendet. Es wendet das Tag nicht auf Instances an, die in einer Amazon EC2 Auto Scaling Scaling-Gruppe gestartet wurden, oder auf Ressourcen des Typs AWS::Xxx::Zzz. (Dies sind Platzhalter für zwei beliebige, aber unterschiedliche AWS CloudFormation Ressourcentypen.)

TypeScript
Tags.of(myConstruct).add('tagname', 'value', { applyToLaunchedInstances: false, includeResourceTypes: ['AWS::Xxx::Yyy'], excludeResourceTypes: ['AWS::Xxx::Zzz'], priority: 100, });
JavaScript
Tags.of(myConstruct).add('tagname', 'value', { applyToLaunchedInstances: false, includeResourceTypes: ['AWS::Xxx::Yyy'], excludeResourceTypes: ['AWS::Xxx::Zzz'], priority: 100 });
Python
Tags.of(my_construct).add("tagname", "value", apply_to_launched_instances=False, include_resource_types=["AWS::Xxx::Yyy"], exclude_resource_types=["AWS::Xxx::Zzz"], priority=100)
Java
Tags.of(myConstruct).add("tagname", "value", TagProps.builder() .applyToLaunchedInstances(false) .includeResourceTypes(Arrays.asList("AWS::Xxx::Yyy")) .excludeResourceTypes(Arrays.asList("AWS::Xxx::Zzz")) .priority(100).build());
C#
Tags.Of(myConstruct).Add("tagname", "value", new TagProps { ApplyToLaunchedInstances = false, IncludeResourceTypes = ["AWS::Xxx::Yyy"], ExcludeResourceTypes = ["AWS::Xxx::Zzz"], Priority = 100 });
Go
awscdk.Tags_Of(myConstruct).Add(jsii.String("tagname"), jsii.String("value"), &awscdk.TagProps{ ApplyToLaunchedInstances: jsii.Bool(false), IncludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Yyy")}, ExcludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Zzz")}, Priority: jsii.Number(100), })

Im folgenden Beispiel wird das Tag tagname mit der Priorität 200 aus Ressourcen des Typs AWS::Xxx::Yyyim Konstrukt entfernt, aber nicht aus Ressourcen des Typs. AWS::Xxx::Zzz

TypeScript
Tags.of(myConstruct).remove('tagname', { includeResourceTypes: ['AWS::Xxx::Yyy'], excludeResourceTypes: ['AWS::Xxx::Zzz'], priority: 200, });
JavaScript
Tags.of(myConstruct).remove('tagname', { includeResourceTypes: ['AWS::Xxx::Yyy'], excludeResourceTypes: ['AWS::Xxx::Zzz'], priority: 200 });
Python
Tags.of(my_construct).remove("tagname", include_resource_types=["AWS::Xxx::Yyy"], exclude_resource_types=["AWS::Xxx::Zzz"], priority=200,)
Java
Tags.of((myConstruct).remove("tagname", TagProps.builder() .includeResourceTypes(Arrays.asList("AWS::Xxx::Yyy")) .excludeResourceTypes(Arrays.asList("AWS::Xxx::Zzz")) .priority(100).build());
C#
Tags.Of(myConstruct).Remove("tagname", new TagProps { IncludeResourceTypes = ["AWS::Xxx::Yyy"], ExcludeResourceTypes = ["AWS::Xxx::Zzz"], Priority = 100 });
Go
awscdk.Tags_Of(myConstruct).Remove(jsii.String("tagname"), &awscdk.TagProps{ IncludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Yyy")}, ExcludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Zzz")}, Priority: jsii.Number(200), })

Beispiel

Im folgenden Beispiel wird der Tag-Schlüssel StackTypemit Wert TheBestzu jeder Ressource hinzugefügt, die innerhalb des Stack Namens MarketingSystem erstellt wurde. Dann entfernt es es wieder aus allen Ressourcen außer Amazon EC2 VPC-Subnetzen. Das Ergebnis ist, dass das Tag nur auf die Subnetze angewendet wurde.

TypeScript
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'] });
JavaScript
const { App, Stack, Tags } = require('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'] });
Python
from aws_cdk import App, Stack, Tags app = App(); the_best_stack = Stack(app, 'MarketingSystem') # Add a tag to all constructs in the stack Tags.of(the_best_stack).add("StackType", "TheBest") # Remove the tag from all resources except subnet resources Tags.of(the_best_stack).remove("StackType", exclude_resource_types=["AWS::EC2::Subnet"])
Java
import software.amazon.awscdk.App; import software.amazon.awscdk.Tags; // 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", TagProps.builder() .excludeResourceTypes(Arrays.asList("AWS::EC2::Subnet")) .build());
C#
using Amazon.CDK; var app = new App(); var 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", new TagProps { ExcludeResourceTypes = ["AWS::EC2::Subnet"] });
Go
import "github.com/aws/aws-cdk-go/awscdk/v2" app := awscdk.NewApp(nil) theBestStack := awscdk.NewStack(app, jsii.String("MarketingSystem"), &awscdk.StackProps{}) // Add a tag to all constructs in the stack awscdk.Tags_Of(theBestStack).Add(jsii.String("StackType"), jsii.String("TheBest"), &awscdk.TagProps{}) // Remove the tag from all resources except subnet resources awscdk.Tags_Of(theBestStack).Add(jsii.String("StackType"), jsii.String("TheBest"), &awscdk.TagProps{ ExcludeResourceTypes: &[]*string{jsii.String("AWS::EC2::Subnet")}, })

Der folgende Code erzielt dasselbe Ergebnis. Überlegen Sie, welcher Ansatz (Inklusion oder Ausschluss) Ihre Absicht klarer macht.

TypeScript
Tags.of(theBestStack).add('StackType', 'TheBest', { includeResourceTypes: ['AWS::EC2::Subnet']});
JavaScript
Tags.of(theBestStack).add('StackType', 'TheBest', { includeResourceTypes: ['AWS::EC2::Subnet']});
Python
Tags.of(the_best_stack).add("StackType", "TheBest", include_resource_types=["AWS::EC2::Subnet"])
Java
Tags.of(theBestStack).add("StackType", "TheBest", TagProps.builder() .includeResourceTypes(Arrays.asList("AWS::EC2::Subnet")) .build());
C#
Tags.Of(theBestStack).Add("StackType", "TheBest", new TagProps { IncludeResourceTypes = ["AWS::EC2::Subnet"] });
Go
awscdk.Tags_Of(theBestStack).Add(jsii.String("StackType"), jsii.String("TheBest"), &awscdk.TagProps{ IncludeResourceTypes: &[]*string{jsii.String("AWS::EC2::Subnet")}, })

Markieren einzelner Konstrukte

Tags.of(scope).add(key, value)ist die Standardmethode zum Hinzufügen von Tags zu Konstrukten in der. AWS CDK Das Verhalten beim Tree-Walking, bei dem rekursiv alle Ressourcen, die mit Tags versehen werden können, innerhalb des angegebenen Bereichs markiert werden, ist fast immer das, was Sie wollen. Manchmal müssen Sie jedoch ein bestimmtes, beliebiges Konstrukt (oder mehrere Konstrukte) taggen.

Ein solcher Fall beinhaltet das Anwenden von Tags, deren Wert von einer Eigenschaft des zu markierenden Konstrukts abgeleitet wird. Der Standardansatz für Tagging wendet rekursiv denselben Schlüssel und Wert auf alle passenden Ressourcen im Bereich an. Hier könnte der Wert jedoch für jedes markierte Konstrukt unterschiedlich sein.

Tags werden mithilfe von Aspekten implementiert, und das CDK ruft die visit() Methode des Tags für jedes Konstrukt innerhalb des von Ihnen angegebenen Tags.of(scope) Bereichs auf. Wir können Tag.visit() direkt aufrufen, um ein Tag auf ein einzelnes Konstrukt anzuwenden.

TypeScript
new cdk.Tag(key, value).visit(scope);
JavaScript
new cdk.Tag(key, value).visit(scope);
Python
cdk.Tag(key, value).visit(scope)
Java
Tag.Builder.create(key, value).build().visit(scope);
C#
new Tag(key, value).Visit(scope);
Go
awscdk.NewTag(key, value, &awscdk.TagProps{}).Visit(scope)

Sie können alle Konstrukte innerhalb eines Gültigkeitsbereichs taggen, die Werte der Tags jedoch von den Eigenschaften der einzelnen Konstrukte ableiten lassen. Schreiben Sie dazu einen Aspekt und wenden Sie das Tag in der visit() Methode des Aussehens an, wie im vorherigen Beispiel gezeigt. Fügen Sie dann den Aspekt mit dem gewünschten Bereich hinzuAspects.of(scope).add(aspect).

Im folgenden Beispiel wird jeder Ressource in einem Stapel, der den Pfad der Ressource enthält, ein Tag zugewiesen.

TypeScript
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())
JavaScript
class PathTagger { visit(node) { new cdk.Tag("aws-cdk-path", node.node.path).visit(node); } } stack = new MyStack(app); cdk.Aspects.of(stack).add(new PathTagger())
Python
@jsii.implements(cdk.IAspect) class PathTagger: def visit(self, node: IConstruct): cdk.Tag("aws-cdk-path", node.node.path).visit(node) stack = MyStack(app) cdk.Aspects.of(stack).add(PathTagger())
Java
final class PathTagger implements IAspect { public void visit(IConstruct node) { Tag.Builder.create("aws-cdk-path", node.getNode().getPath()).build().visit(node); } } stack stack = new MyStack(app); Aspects.of(stack).add(new PathTagger());
C#
public class PathTagger : IAspect { public void Visit(IConstruct node) { new Tag("aws-cdk-path", node.Node.Path).Visit(node); } } var stack = new MyStack(app); Aspects.Of(stack).Add(new PathTagger);
Tipp

Die Logik der bedingten Kennzeichnung, einschließlich Prioritäten, Ressourcentypen usw., ist in die Tag Klasse integriert. Sie können diese Funktionen verwenden, wenn Sie Tags auf beliebige Ressourcen anwenden. Das Tag wird nicht angewendet, wenn die Bedingungen nicht erfüllt sind. Außerdem kennzeichnet die Tag Klasse nur Ressourcen, die mit Tags versehen werden können, sodass Sie nicht testen müssen, ob ein Konstrukt markierbar ist, bevor Sie ein Tag anwenden.