Ceci est le guide du AWS CDK développeur de la version 2. 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 balises sont des éléments clé-valeur informatifs que vous pouvez ajouter aux constructions de votre application. AWS 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 dans le AWS livre blanc.
Utilisation d’étiquettes
La Tags
classe inclut la méthode statiqueof()
, grâce à laquelle vous pouvez ajouter des balises à la construction spécifiée ou en supprimer.
-
Tags.of(
applique une nouvelle balise à la construction donnée et à tous ses enfants.SCOPE
).add() -
Tags.of(
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.SCOPE
).remove()
Note
Le balisage est implémenté à l'aide deAspects et AWS CDK. 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.
Tags.of(myConstruct).add('key', 'value');
L'exemple suivant supprime la clé de balise d'une construction.
Tags.of(myConstruct).remove('key');
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
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.
Tags.of(myConstruct).add('key', 'value', {
priority: 300
});
Propriétés facultatives
Les balises properties
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érationsTags.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 valeur et la priorité 100 aux ressources de type AWS::Xxx::Yyydans la construction. Il n'applique pas le tag aux instances lancées dans un groupe Amazon EC2 Auto Scaling ni aux ressources de ce type AWS::Xxx::Zzz. (Il s'agit d'espaces réservés pour deux types de AWS CloudFormation ressources arbitraires mais différents.)
Tags.of(myConstruct).add('tagname', 'value', {
applyToLaunchedInstances: false,
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 100,
});
L'exemple suivant supprime le tag tagname avec la priorité 200 des ressources de type AWS::Xxx::Yyydans la construction, mais pas des ressources de type AWS::Xxx::Zzz.
Tags.of(myConstruct).remove('tagname', {
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 200,
});
exemple
L'exemple suivant ajoute la clé de balise StackTypeavec valeur TheBestà toute ressource créée dans le Stack
nomMarketingSystem
. 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.
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']
});
Le code suivant permet d'obtenir le même résultat. Déterminez quelle approche (inclusion ou exclusion) rend votre intention plus claire.
Tags.of(theBestStack).add('StackType', 'TheBest',
{ includeResourceTypes: ['AWS::EC2::Subnet']});
Marquage de constructions individuelles
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, et le CDK appelle la visit()
méthode de la balise pour chaque construction dans le cadre que vous avez spécifié en utilisantTags.of(scope)
. Nous pouvons appeler Tag.visit()
directement pour appliquer une balise à une seule construction.
new cdk.Tag(key, value).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 deAspects.of(scope).add(aspect)
.
L'exemple suivant applique une balise à chaque ressource d'une pile contenant le chemin de la ressource.
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())
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.