Tags e o AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Este é o Guia do Desenvolvedor AWS CDK v2. A versão CDK 1 mais antiga entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tags e o AWS CDK

As tags são elementos informativos de valor-chave que você pode adicionar às construções em seu aplicativo. AWS CDK Uma tag aplicada a uma determinada construção também se aplica a todos os seus filhos marcáveis. As tags são incluídas no AWS CloudFormation modelo sintetizado a partir do seu aplicativo e aplicadas aos AWS recursos que ele implanta. Você pode usar tags para identificar e categorizar recursos para as seguintes finalidades:

  • Simplificando o gerenciamento

  • Alocação de custos

  • Controle de acesso

  • Quaisquer outros propósitos que você conceba

dica

Para obter mais informações sobre como você pode usar tags com seus AWS recursos, consulte Melhores práticas para marcar AWS recursos no AWS whitepaper.

Usar tags

A Tagsclasse inclui o método estáticoof(), por meio do qual você pode adicionar ou remover tags da construção especificada.

  • Tags.of(SCOPE).add()aplica uma nova tag à construção fornecida e a todos os seus filhos.

  • Tags.of(SCOPE).remove()remove uma tag de uma determinada construção e de qualquer um de seus filhos, incluindo tags que uma construção secundária possa ter aplicado a si mesma.

nota

A marcação é implementada usandoAspectos e o AWS CDK. Aspectos são uma forma de aplicar uma operação (como marcação) a todas as construções em um determinado escopo.

O exemplo a seguir aplica a chave de tag com o valor do valor a uma construção.

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{})

O exemplo a seguir exclui a chave da tag de uma construção.

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{})

Se você estiver usando Stage construções, aplique a tag no Stage nível ou abaixo. As etiquetas não são aplicadas além Stage dos limites.

Prioridades de tags

O AWS CDK aplica e remove as tags recursivamente. Se houver conflitos, a operação de marcação com a prioridade mais alta vence. (As prioridades são definidas usando a priority propriedade opcional.) Se as prioridades de duas operações forem as mesmas, a operação de marcação mais próxima da parte inferior da árvore de construção vence. Por padrão, a aplicação de uma tag tem uma prioridade de 100 (exceto as tags adicionadas diretamente a um AWS CloudFormation recurso, que tem uma prioridade de 50). A prioridade padrão para remover uma tag é 200.

O seguinte aplica uma tag com prioridade de 300 a uma construção.

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), })

Propriedades opcionais

As tags propertiesoferecem suporte para ajustar a forma como as tags são aplicadas ou removidas dos recursos. Todas as propriedades são opcionais.

applyToLaunchedInstances(Python:) apply_to_launched_instances

Disponível somente para add (). Por padrão, as tags são aplicadas às instâncias executadas em um grupo de Auto Scaling. Defina essa propriedade como false para ignorar instâncias iniciadas em um grupo de Auto Scaling.

includeResourceTypes/excludeResourceTypes(Python:include_resource_types/) exclude_resource_types

Use-os para manipular tags somente em um subconjunto de recursos, com base nos tipos de AWS CloudFormation recursos. Por padrão, a operação é aplicada a todos os recursos na subárvore de construção, mas isso pode ser alterado incluindo ou excluindo determinados tipos de recursos. Excluir tem precedência sobre incluir, se ambas forem especificadas.

priority

Use isso para definir a prioridade dessa operação em relação a outras Tags.remove() operações Tags.add() e. Valores mais altos têm precedência sobre valores mais baixos. O padrão é 100 para operações de adição (50 para tags aplicadas diretamente aos AWS CloudFormation recursos) e 200 para operações de remoção.

O exemplo a seguir aplica a tag tagname com o valor e a prioridade 100 aos recursos do tipo AWS: :Xxx: :Yyy na construção. Ela não aplica a tag a instâncias lançadas em um grupo do Amazon EC2 Auto Scaling ou a recursos do tipo AWS: :Xxx: :Zzz. (Esses são espaços reservados para dois tipos de AWS CloudFormation recursos arbitrários, mas diferentes.)

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), })

O exemplo a seguir remove a tag tagname com prioridade 200 dos recursos do tipo AWS: :Xxx: :Yyy na construção, mas não dos recursos do tipoAWS: :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), })

Exemplo

O exemplo a seguir adiciona a chave de tag StackTypecom valor TheBesta qualquer recurso criado dentro do Stack nomeMarketingSystem. Em seguida, ele o remove novamente de todos os recursos, exceto das EC2 VPC sub-redes da Amazon. O resultado é que somente as sub-redes têm a tag aplicada.

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")}, })

O código a seguir obtém o mesmo resultado. Considere qual abordagem (inclusão ou exclusão) torna sua intenção mais clara.

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")}, })

Marcação de construções únicas

Tags.of(scope).add(key, value)é a forma padrão de adicionar tags às construções no AWS CDK. Seu comportamento de caminhar em árvores, que marca recursivamente todos os recursos marcáveis sob um determinado escopo, é quase sempre o que você deseja. Às vezes, no entanto, você precisa marcar uma construção (ou construções) específica e arbitrária.

Um desses casos envolve a aplicação de tags cujo valor é derivado de alguma propriedade da construção que está sendo marcada. A abordagem de marcação padrão aplica recursivamente a mesma chave e valor a todos os recursos correspondentes no escopo. No entanto, aqui o valor pode ser diferente para cada construção marcada.

As tags são implementadas usando aspectos e CDK chamam o visit() método da tag para cada construção sob o escopo que você especificou usandoTags.of(scope). Podemos chamar Tag.visit() diretamente para aplicar uma tag a uma única construção.

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)

Você pode marcar todas as construções em um escopo, mas deixar que os valores das tags sejam derivados das propriedades de cada construção. Para fazer isso, escreva um aspecto e aplique a tag no visit() método do aspecto, conforme mostrado no exemplo anterior. Em seguida, adicione o aspecto ao escopo desejado usandoAspects.of(scope).add(aspect).

O exemplo a seguir aplica uma tag a cada recurso em uma pilha contendo o caminho do recurso.

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);
dica

A lógica da marcação condicional, incluindo prioridades, tipos de recursos e assim por diante, é incorporada à Tag classe. Você pode usar esses recursos ao aplicar tags a recursos arbitrários; a tag não é aplicada se as condições não forem atendidas. Além disso, a Tag classe só marca recursos marcáveis, então você não precisa testar se uma construção pode ser marcada antes de aplicar uma tag.