

Ceci est le guide du développeur du AWS CDK v2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Les tags et le AWS CDK
<a name="tagging"></a>

Les balises sont des éléments clé-valeur informatifs que vous pouvez ajouter aux constructions de votre AWS application CDK. Une balise appliquée à une construction donnée s'applique également à tous ses enfants étiquetables. Les balises sont incluses dans le AWS CloudFormation modèle synthétisé à partir de votre application et sont appliquées aux AWS ressources qu'elle déploie. Vous pouvez utiliser des balises pour identifier et classer les ressources aux fins suivantes :
+ Simplification de la gestion
+ Répartition des coûts
+ Contrôle d’accès
+ Tout autre objectif que vous concevez

**Astuce**  
Pour plus d'informations sur la manière dont vous pouvez utiliser les balises avec vos AWS ressources, consultez les [meilleures pratiques en matière de balisage AWS des ressources](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html) dans le * AWS livre blanc*.

## Utilisation d’étiquettes
<a name="tagging-use"></a>

La classe [Tags](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Tags.html) inclut la méthode statique`of()`, grâce à laquelle vous pouvez ajouter des balises à la construction spécifiée ou en supprimer.
+  [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Tags.html#addkey-value-props](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Tags.html#addkey-value-props)applique une nouvelle balise à la construction donnée et à tous ses enfants.
+  [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Tags.html#removekey-props](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Tags.html#removekey-props)supprime une balise de la construction donnée et de tous ses enfants, y compris les balises qu'une construction enfant peut s'être appliquée à elle-même.

**Note**  
Le balisage est implémenté à l'aide d'[Aspects et du AWS CDK](aspects.md). Les aspects permettent d'appliquer une opération (telle que le balisage) à toutes les constructions d'une portée donnée.

L'exemple suivant applique la **clé** de balise avec la valeur de **valeur** à une construction.

**Example**  

```
Tags.of(myConstruct).add('key', 'value');
```

```
Tags.of(myConstruct).add('key', 'value');
```

```
Tags.of(my_construct).add("key", "value")
```

```
Tags.of(myConstruct).add("key", "value");
```

```
Tags.Of(myConstruct).Add("key", "value");
```

```
awscdk.Tags_Of(myConstruct).Add(jsii.String("key"), jsii.String("value"), &awscdk.TagProps{})
```

L'exemple suivant supprime la **clé** de balise d'une construction.

**Example**  

```
Tags.of(myConstruct).remove('key');
```

```
Tags.of(myConstruct).remove('key');
```

```
Tags.of(my_construct).remove("key")
```

```
Tags.of(myConstruct).remove("key");
```

```
Tags.Of(myConstruct).Remove("key");
```

```
awscdk.Tags_Of(myConstruct).Remove(jsii.String("key"), &awscdk.TagProps{})
```

Si vous utilisez `Stage` des constructions, appliquez la balise au `Stage` niveau ou en dessous. Les balises ne sont pas appliquées au-delà `Stage` des limites.

## Priorités des tags
<a name="tagging-priorities"></a>

Le AWS CDK applique et supprime les balises de manière récursive. En cas de conflit, l'opération de balisage ayant la priorité la plus élevée l'emporte. (Les priorités sont définies à l'aide de la `priority` propriété facultative.) Si les priorités de deux opérations sont les mêmes, l'opération de balisage la plus proche du bas de l'arbre de construction gagne. Par défaut, l'application d'une balise a une priorité de 100 (sauf pour les balises ajoutées directement à une AWS CloudFormation ressource, qui ont une priorité de 50). La priorité par défaut pour supprimer un tag est 200.

Ce qui suit applique une balise avec une priorité de 300 à une construction.

**Example**  

```
Tags.of(myConstruct).add('key', 'value', {
  priority: 300
});
```

```
Tags.of(myConstruct).add('key', 'value', {
  priority: 300
});
```

```
Tags.of(my_construct).add("key", "value", priority=300)
```

```
Tags.of(myConstruct).add("key", "value", TagProps.builder()
        .priority(300).build());
```

```
Tags.Of(myConstruct).Add("key", "value", new TagProps { Priority = 300 });
```

```
awscdk.Tags_Of(myConstruct).Add(jsii.String("key"), jsii.String("value"), &awscdk.TagProps{
  Priority: jsii.Number(300),
})
```

## Propriétés facultatives
<a name="tagging-props"></a>

Les balises [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.TagProps.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.TagProps.html)permettent d'affiner la manière dont les balises sont appliquées ou supprimées des ressources. Toutes les propriétés sont facultatives.

 `applyToLaunchedInstances`(Python :`apply_to_launched_instances`)  
Disponible uniquement pour add (). Par défaut, les balises sont appliquées aux instances lancées dans un groupe Auto Scaling. Définissez cette propriété sur **false** pour ignorer les instances lancées dans un groupe Auto Scaling.

 `includeResourceTypes`/`excludeResourceTypes`(Python :`include_resource_types`/`exclude_resource_types`)  
Utilisez-les pour manipuler les balises uniquement sur un sous-ensemble de ressources, en fonction des types de AWS CloudFormation ressources. Par défaut, l'opération est appliquée à toutes les ressources du sous-arbre de construction, mais cela peut être modifié en incluant ou en excluant certains types de ressources. L'exclusion a priorité sur l'inclusion, si les deux sont spécifiées.

 `priority`   
Utilisez-le pour définir la priorité de cette opération par rapport aux autres `Tags.remove()` opérations `Tags.add()` et. Les valeurs les plus élevées ont priorité sur les valeurs les plus faibles. La valeur par défaut est de 100 pour les opérations d'ajout (50 pour les balises appliquées directement aux AWS CloudFormation ressources) et de 200 pour les opérations de suppression.

L'exemple suivant applique le tag **tagname** avec la **valeur** et la priorité **100** aux ressources de type ** AWS: :Xxx : :Yyy** dans la construction. Il n'applique pas le tag aux instances lancées dans un groupe Amazon EC2 Auto Scaling ni aux ressources de type ** AWS: :Xxx : :Zzz**. (Il s'agit d'espaces réservés pour deux types de AWS CloudFormation ressources arbitraires mais différents.)

**Example**  

```
Tags.of(myConstruct).add('tagname', 'value', {
  applyToLaunchedInstances: false,
  includeResourceTypes: ['AWS::Xxx::Yyy'],
  excludeResourceTypes: ['AWS::Xxx::Zzz'],
  priority: 100,
});
```

```
Tags.of(myConstruct).add('tagname', 'value', {
  applyToLaunchedInstances: false,
  includeResourceTypes: ['AWS::Xxx::Yyy'],
  excludeResourceTypes: ['AWS::Xxx::Zzz'],
  priority: 100
});
```

```
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)
```

```
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());
```

```
Tags.Of(myConstruct).Add("tagname", "value", new TagProps
{
    ApplyToLaunchedInstances = false,
    IncludeResourceTypes = ["AWS::Xxx::Yyy"],
    ExcludeResourceTypes = ["AWS::Xxx::Zzz"],
    Priority = 100
});
```

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

L'exemple suivant supprime le tag **tagname** avec la priorité **200** des ressources de type ** AWS: :Xxx : :Yyy** dans la construction, mais pas des ressources de type ** AWS: :Xxx :** :Zzz.

**Example**  

```
Tags.of(myConstruct).remove('tagname', {
  includeResourceTypes: ['AWS::Xxx::Yyy'],
  excludeResourceTypes: ['AWS::Xxx::Zzz'],
  priority: 200,
});
```

```
Tags.of(myConstruct).remove('tagname', {
  includeResourceTypes: ['AWS::Xxx::Yyy'],
  excludeResourceTypes: ['AWS::Xxx::Zzz'],
  priority: 200
});
```

```
Tags.of(my_construct).remove("tagname",
    include_resource_types=["AWS::Xxx::Yyy"],
    exclude_resource_types=["AWS::Xxx::Zzz"],
    priority=200,)
```

```
Tags.of((myConstruct).remove("tagname", TagProps.builder()
        .includeResourceTypes(Arrays.asList("AWS::Xxx::Yyy"))
        .excludeResourceTypes(Arrays.asList("AWS::Xxx::Zzz"))
        .priority(100).build());
        )
```

```
Tags.Of(myConstruct).Remove("tagname", new TagProps
{
    IncludeResourceTypes = ["AWS::Xxx::Yyy"],
    ExcludeResourceTypes = ["AWS::Xxx::Zzz"],
    Priority = 100
});
```

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

## exemple
<a name="tagging-example"></a>

L'exemple suivant ajoute la clé de balise **StackType**avec valeur **TheBest**à toute ressource créée dans le `Stack` nom`MarketingSystem`. Il le supprime ensuite à nouveau de toutes les ressources, à l'exception des EC2 sous-réseaux Amazon VPC. Le résultat est que seuls les sous-réseaux ont la balise appliquée.

**Example**  

```
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']
});
```

```
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']
});
```

```
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"])
```

```
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());
```

```
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"]
});
```

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

Le code suivant permet d'obtenir le même résultat. Déterminez quelle approche (inclusion ou exclusion) rend votre intention plus claire.

**Example**  

```
Tags.of(theBestStack).add('StackType', 'TheBest',
  { includeResourceTypes: ['AWS::EC2::Subnet']});
```

```
Tags.of(theBestStack).add('StackType', 'TheBest',
  { includeResourceTypes: ['AWS::EC2::Subnet']});
```

```
Tags.of(the_best_stack).add("StackType", "TheBest",
    include_resource_types=["AWS::EC2::Subnet"])
```

```
Tags.of(theBestStack).add("StackType", "TheBest", TagProps.builder()
        .includeResourceTypes(Arrays.asList("AWS::EC2::Subnet"))
        .build());
```

```
Tags.Of(theBestStack).Add("StackType", "TheBest", new TagProps {
    IncludeResourceTypes = ["AWS::EC2::Subnet"]
});
```

```
awscdk.Tags_Of(theBestStack).Add(jsii.String("StackType"), jsii.String("TheBest"), &awscdk.TagProps{
  IncludeResourceTypes: &[]*string{jsii.String("AWS::EC2::Subnet")},
})
```

## Marquage de constructions individuelles
<a name="tagging-single"></a>

 `Tags.of(scope).add(key, value)`est la méthode standard pour ajouter des balises aux constructions du AWS CDK. Son comportement arborescent, qui balise de manière récursive toutes les ressources étiquetables dans le cadre d'une portée donnée, correspond presque toujours à ce que vous recherchez. Cependant, vous devez parfois étiqueter une ou plusieurs constructions arbitraires spécifiques.

L'un de ces cas implique l'application de balises dont la valeur est dérivée d'une propriété de la construction étiquetée. L'approche de balisage standard applique de manière récursive la même clé et la même valeur à toutes les ressources correspondantes du périmètre. Cependant, ici, la valeur peut être différente pour chaque construction étiquetée.

Les balises sont implémentées à l'aide d'[aspects](aspects.md), et le CDK appelle la `visit()` méthode de la balise pour chaque construction dans le cadre que vous avez spécifié en utilisant`Tags.of(scope)`. Nous pouvons appeler `Tag.visit()` directement pour appliquer une balise à une seule construction.

**Example**  

```
new cdk.Tag(key, value).visit(scope);
```

```
new cdk.Tag(key, value).visit(scope);
```

```
cdk.Tag(key, value).visit(scope)
```

```
Tag.Builder.create(key, value).build().visit(scope);
```

```
new Tag(key, value).Visit(scope);
```

```
awscdk.NewTag(key, value, &awscdk.TagProps{}).Visit(scope)
```

Vous pouvez étiqueter toutes les constructions d'une portée, mais laisser les valeurs des balises dériver des propriétés de chaque construction. Pour ce faire, écrivez un aspect et appliquez la balise dans la `visit()` méthode de l'aspect, comme indiqué dans l'exemple précédent. Ajoutez ensuite l'aspect à la portée souhaitée à l'aide de`Aspects.of(scope).add(aspect)`.

L'exemple suivant applique une balise à chaque ressource d'une pile contenant le chemin de la ressource.

**Example**  

```
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())
```

```
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())
```

```
@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())
```

```
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());
```

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

**Astuce**  
La logique du balisage conditionnel, y compris les priorités, les types de ressources, etc., est intégrée à la `Tag` classe. Vous pouvez utiliser ces fonctionnalités lorsque vous appliquez des balises à des ressources arbitraires ; la balise n'est pas appliquée si les conditions ne sont pas remplies. De plus, la `Tag` classe balise uniquement les ressources balisables, vous n'avez donc pas besoin de tester si une construction est balisable avant d'appliquer une balise.