Ceci est le guide du AWS CDK développeur de la version 2. L'ancienne CDK version 1 est entrée 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 valeurs contextuelles et le AWS CDK
Les valeurs de contexte sont des paires clé-valeur qui peuvent être associées à une application, à une pile ou à une construction. Ils peuvent être fournis à votre application à partir d'un fichier (généralement dans le répertoire de votre projet cdk.json
ou cdk.context.json
dans le répertoire de votre projet) ou sur la ligne de commande.
Le CDK kit d'outils utilise le contexte pour mettre en cache les valeurs extraites de votre AWS compte lors de la synthèse. Les valeurs incluent les zones de disponibilité de votre compte ou l'image Amazon Machine (AMI) IDs actuellement disponible pour les EC2 instances Amazon. Comme ces valeurs sont fournies par votre AWS compte, elles peuvent changer entre les exécutions de votre CDK application. Cela en fait une source potentielle de changements involontaires. Le comportement de mise en cache du CDK Toolkit « bloque » ces valeurs pour votre CDK application jusqu'à ce que vous décidiez d'accepter les nouvelles valeurs.
Imaginez le scénario suivant sans mise en cache du contexte. Supposons que vous ayez spécifié la « dernière version d'Amazon Linux » AMI pour vos EC2 instances Amazon, et qu'une nouvelle version AMI ait été publiée. Ensuite, la prochaine fois que vous CDK déploierez votre stack, vos instances déjà déployées utiliseront la version obsolète (« incorrecte ») AMI et devront être mises à niveau. La mise à niveau entraînerait le remplacement de toutes vos instances existantes par de nouvelles, ce qui serait probablement inattendu et indésirable.
Au lieu de cela, les CDK enregistrements de votre compte sont disponibles AMIs dans cdk.context.json
le fichier de votre projet et utilisent la valeur stockée pour les futures opérations de synthèse. Ainsi, la liste des n'AMIsest plus une source potentielle de changement. Vous pouvez également être sûr que vos piles seront toujours synthétisées selon les mêmes AWS CloudFormation modèles.
Les valeurs de contexte ne sont pas toutes des valeurs mises en cache dans votre AWS environnement. AWS CDK drapeaux caractéristiquessont également des valeurs contextuelles. Vous pouvez également créer vos propres valeurs de contexte à utiliser par vos applications ou constructions.
Les clés de contexte sont des chaînes de caractères. Les valeurs peuvent être de n'importe quel type supporté par JSON : des nombres, des chaînes, des tableaux ou des objets.
Astuce
Si vos constructions créent leurs propres valeurs de contexte, intégrez le nom du package de votre bibliothèque dans ses clés afin qu'il n'entre pas en conflit avec les valeurs de contexte des autres packages.
De nombreuses valeurs de contexte sont associées à un AWS environnement particulier, et une CDK application donnée peut être déployée dans plusieurs environnements. La clé de ces valeurs inclut le AWS compte et la région afin que les valeurs issues de différents environnements n'entrent pas en conflit.
La clé de contexte suivante illustre le format utilisé par le AWS CDK, y compris le compte et la région.
availability-zones:account=123456789012:region=eu-central-1
Important
Les valeurs de contexte mises en cache sont gérées par le AWS CDK et ses constructions, y compris les constructions que vous pouvez écrire. N'ajoutez ni ne modifiez les valeurs de contexte mises en cache en modifiant manuellement les fichiers. Il peut toutefois être utile de vérifier de cdk.context.json
temps en temps quelles valeurs sont mises en cache. Les valeurs de contexte qui ne représentent pas les valeurs mises en cache doivent être stockées sous la context
clé decdk.json
. De cette façon, elles ne seront pas effacées lorsque les valeurs mises en cache seront effacées.
Sources des valeurs contextuelles
Les valeurs de contexte peuvent être fournies à votre AWS CDK application de six manières différentes :
-
Automatiquement depuis le AWS compte courant.
-
Grâce à l'--contextoption de cdk commande. (Ces valeurs sont toujours des chaînes.)
-
Dans le
cdk.context.json
dossier du projet. -
Dans la
context
clé ducdk.json
fichier du projet. -
Dans la
context
clé de votre~/.cdk.json
dossier. -
Dans votre AWS CDK application en utilisant la
construct.node.setContext()
méthode.
Le fichier de projet cdk.context.json
est l'endroit où sont mises en AWS CDK cache les valeurs de contexte extraites de votre AWS compte. Cette pratique permet d'éviter des modifications inattendues de vos déploiements lorsque, par exemple, une nouvelle zone de disponibilité est introduite. Le AWS CDK n'écrit pas de données contextuelles dans aucun des autres fichiers répertoriés.
Important
Parce qu'ils font partie de l'état de votre application cdk.json
et cdk.context.json
doivent être affectés au contrôle de source avec le reste du code source de votre application. Dans le cas contraire, les déploiements dans d'autres environnements (par exemple, un pipeline CI) risquent de produire des résultats incohérents.
Les valeurs de contexte sont limitées à la structure qui les a créées ; elles sont visibles pour les structures enfants, mais pas pour les parents ou les frères et sœurs. Les valeurs de contexte définies par le AWS CDK Toolkit (la cdk commande) peuvent être définies automatiquement, à partir d'un fichier ou à partir de l'--contextoption. Les valeurs de contexte issues de ces sources sont définies implicitement dans la App
construction. Ils sont donc visibles pour toutes les constructions de chaque pile de l'application.
Votre application peut lire une valeur de contexte à l'aide de construct.node.tryGetContext
cette méthode. Si l'entrée demandée ne se trouve pas dans le build actuel ou dans l'un de ses parents, le résultat estundefined
. (Le résultat peut également être l'équivalent de votre langage, comme None
en Python.)
Méthodes de contexte
Il AWS CDK prend en charge plusieurs méthodes contextuelles qui permettent aux AWS CDK applications d'obtenir des informations contextuelles à partir de l' AWS environnement. Par exemple, vous pouvez obtenir une liste des zones de disponibilité disponibles dans un AWS compte et une région donnés à l'aide de la pile. availabilityZonesméthode.
Les méthodes contextuelles sont les suivantes :
- HostedZone.fromLookup
-
Récupère les zones hébergées dans votre compte.
- pile. availabilityZones
-
Obtient les zones de disponibilité prises en charge.
- StringParameter.valueFromLookup
-
Obtient une valeur depuis le magasin de paramètres Amazon EC2 Systems Manager de la région actuelle.
- VPC. fromLookup
-
Permet d'intégrer les Amazon Virtual Private Clouds existants à vos comptes.
- LookupMachineImage
-
Recherche une image de machine à utiliser avec une NAT instance dans un Amazon Virtual Private Cloud.
Si aucune valeur de contexte requise n'est disponible, l' AWS CDK application indique au CDK Toolkit que les informations de contexte sont manquantes. Ensuite, il CLI interroge le AWS compte courant pour obtenir les informations et stocke les informations contextuelles obtenues dans le cdk.context.json
fichier. Ensuite, il exécute à nouveau l' AWS CDK application avec les valeurs de contexte.
Affichage et gestion du contexte
Utilisez la cdk context commande pour afficher et gérer les informations de votre cdk.context.json
fichier. Pour voir ces informations, utilisez la cdk context commande sans aucune option. Le résultat devrait ressembler à ce qui suit.
Context found in cdk.json: ┌───┬─────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┐ │ # │ Key │ Value │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 1 │ availability-zones:account=123456789012:region=eu-central-1 │ [ "eu-central-1a", "eu-central-1b", "eu-central-1c" ] │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 2 │ availability-zones:account=123456789012:region=eu-west-1 │ [ "eu-west-1a", "eu-west-1b", "eu-west-1c" ] │ └───┴─────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┘ Runcdk context --reset KEY_OR_NUMBER
to remove a context key. If it is a cached value, it will be refreshed on the nextcdk synth
.
Pour supprimer une valeur de contextecdk context --reset, exécutez en spécifiant la clé ou le numéro correspondant à la valeur. L'exemple suivant supprime la valeur qui correspond à la deuxième clé de l'exemple précédent. Cette valeur représente la liste des zones de disponibilité de la région Europe (Irlande).
cdk context --reset 2
Context value availability-zones:account=123456789012:region=eu-west-1 reset. It will be refreshed on the next SDK synthesis run.
Par conséquent, si vous souhaitez passer à la dernière version d'Amazon LinuxAMI, utilisez l'exemple précédent pour effectuer une mise à jour contrôlée de la valeur de contexte et la réinitialiser. Ensuite, synthétisez et déployez à nouveau votre application.
cdk synth
Pour effacer toutes les valeurs de contexte stockées pour votre applicationcdk context --clear, exécutez la procédure suivante.
cdk context --clear
Seules les valeurs de contexte stockées cdk.context.json
peuvent être réinitialisées ou effacées. Ne touche AWS CDK pas les autres valeurs de contexte. Par conséquent, pour empêcher la réinitialisation d'une valeur de contexte à l'aide de ces commandes, vous pouvez copier la valeur danscdk.json
.
AWS CDK--context
Drapeau Toolkit
Utilisez l'option --context
(en abrégé) -c
pour transmettre les valeurs du contexte d'exécution à votre CDK application lors de la synthèse ou du déploiement.
cdk synth --context key=value MyStack
Pour spécifier plusieurs valeurs de contexte, répétez l'--contextoption autant de fois que vous le souhaitez, en fournissant une paire clé-valeur à chaque fois.
cdk synth --context key1=value1 --context key2=value2 MyStack
Lors de la synthèse de plusieurs piles, les valeurs de contexte spécifiées sont transmises à toutes les piles. Pour fournir différentes valeurs de contexte à des piles individuelles, utilisez des touches différentes pour les valeurs ou utilisez plusieurs cdk synth cdk deploy commandes.
Les valeurs de contexte transmises depuis la ligne de commande sont toujours des chaînes. Si une valeur est généralement d'un autre type, votre code doit être prêt à la convertir ou à l'analyser. Il se peut que des valeurs de contexte autres que des chaînes soient fournies d'une autre manière (par exemple, danscdk.context.json
). Pour vous assurer que ce type de valeur fonctionne comme prévu, vérifiez qu'il s'agit d'une chaîne avant de la convertir.
Exemple
Voici un exemple d'utilisation d'un AWS CDK contexte d'VPCutilisation d'Amazon existant.
Vous pouvez utiliser cdk diff pour voir les effets de la transmission d'une valeur de contexte sur la ligne de commande :
cdk diff -c vpcid=vpc-0cb9c31031d0d3e22
Stack ExistsvpcStack
Outputs
[+] Output publicsubnets publicsubnets: {"Value":"subnet-06e0ea7dd302d3e8f,subnet-01fc0acfb58f3128f"}
Les valeurs de contexte résultantes peuvent être visualisées comme indiqué ici.
cdk context -j
{ "vpc-provider:account=123456789012:filter.vpc-id=vpc-0cb9c31031d0d3e22:region=us-east-1": { "vpcId": "vpc-0cb9c31031d0d3e22", "availabilityZones": [ "us-east-1a", "us-east-1b" ], "privateSubnetIds": [ "subnet-03ecfc033225be285", "subnet-0cded5da53180ebfa" ], "privateSubnetNames": [ "Private" ], "privateSubnetRouteTableIds": [ "rtb-0e955393ced0ada04", "rtb-05602e7b9f310e5b0" ], "publicSubnetIds": [ "subnet-06e0ea7dd302d3e8f", "subnet-01fc0acfb58f3128f" ], "publicSubnetNames": [ "Public" ], "publicSubnetRouteTableIds": [ "rtb-00d1fdfd823c82289", "rtb-04bb1969b42969bcb" ] } }