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.
Une AWS CDK pile est la plus petite unité de déploiement. Il représente un ensemble de AWS ressources que vous définissez à l'aide des constructions CDK. Lorsque vous déployez des applications CDK, les ressources d'une pile CDK sont déployées ensemble sous forme de pile. AWS CloudFormation Pour en savoir plus sur les AWS CloudFormation piles, consultez la section Gestion des ressources AWS en tant qu'unité unique avec des AWS CloudFormation piles dans le Guide de l'AWS CloudFormation utilisateur.
Vous définissez une pile en étendant ou en héritant de la Stack
construction. L'exemple suivant est un modèle courant pour définir une pile CDK dans un fichier distinct, appelé fichier de pile. Ici, nous étendons ou héritons de la Stack
classe et définissons un constructeur qui accepte scope
id
, et. props
Ensuite, nous invoquons le constructeur de la Stack
classe de base en utilisant super
avec le reçu scope
id
, et props
:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class MyCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define your constructs here
}
}
L'exemple précédent a uniquement défini une pile. Pour créer la pile, elle doit être instanciée dans le contexte de votre application CDK. Un modèle courant consiste à définir votre application CDK et à initialiser votre pile sur un fichier distinct, appelé fichier d'application.
Voici un exemple de création d'une pile CDK nomméeMyCdkStack
. Ici, l'application CDK est créée et MyCdkStack
instanciée dans le contexte de l'application :
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MyCdkStack } from '../lib/my-cdk-stack';
const app = new cdk.App();
new MyCdkStack(app, 'MyCdkStack', {
});
L'exemple suivant crée une application CDK contenant deux piles :
const app = new App();
new MyFirstStack(app, 'stack1');
new MySecondStack(app, 'stack2');
app.synth();
À propos de l'API Stack
L'Stack
objet fournit une API riche, notamment les éléments suivants :
-
Stack.of(construct)
— Méthode statique qui renvoie la pile dans laquelle une construction est définie. Ceci est utile si vous devez interagir avec une pile à partir d'une construction réutilisable. L'appel échoue si aucune pile n'est trouvée dans la portée. -
stack.stackName
(Python :stack_name
) — Renvoie le nom physique de la pile. Comme mentionné précédemment, toutes les AWS CDK piles ont un nom physique qu'elles AWS CDK peuvent résoudre lors de la synthèse. -
stack.region
etstack.account
— Renvoie la AWS région et le compte, respectivement, dans lesquels cette pile sera déployée. Ces propriétés renvoient l'une des valeurs suivantes :-
Le compte ou la région explicitement spécifié lors de la définition de la pile
-
Un jeton codé par chaîne qui résout les AWS CloudFormation pseudo-paramètres du compte et de la région pour indiquer que cette pile est indépendante de l'environnement
Pour plus d'informations sur la manière dont les environnements sont déterminés pour les piles, consultezEnvironnements pour le AWS CDK.
-
-
stack.addDependency(stack)
(Python :stack.add_dependency(stack)
— Peut être utilisé pour définir explicitement l'ordre de dépendance entre deux piles. Cet ordre est respecté par la cdk deploy commande lors du déploiement de plusieurs piles à la fois. -
stack.tags
— Renvoie un TagManagerque vous pouvez utiliser pour ajouter ou supprimer des balises au niveau de la pile. Ce gestionnaire de balises balise toutes les ressources de la pile et balise également la pile elle-même lorsqu'elle est créée AWS CloudFormation. -
stack.partition
,stack.urlSuffix
(Python :url_suffix
),stack.stackId
(Python :stack_id
) etstack.notificationArn
(Python :notification_arn
) — Renvoie des jetons qui se résolvent en AWS CloudFormation pseudo-paramètres respectifs, tels que{ "Ref": "AWS::Partition" }
. Ces jetons sont associés à l'objet de pile spécifique afin que le AWS CDK framework puisse identifier les références entre piles. -
stack.availabilityZones
(Python :availability_zones
) — Renvoie l'ensemble des zones de disponibilité disponibles dans l'environnement dans lequel cette pile est déployée. Pour les piles indépendantes de l'environnement, cela renvoie toujours une baie avec deux zones de disponibilité. Pour les piles spécifiques à un environnement, le AWS CDK interroge l'environnement et renvoie l'ensemble exact de zones de disponibilité disponibles dans la région que vous avez spécifiée. -
stack.parseArn(arn)
andstack.formatArn(comps)
(Python :parse_arn
,format_arn
) — Peut être utilisé pour travailler avec Amazon Resource Names (ARNs). -
stack.toJsonString(obj)
(Python :to_json_string
) — Peut être utilisé pour formater un objet arbitraire sous forme de chaîne JSON pouvant être intégrée dans un AWS CloudFormation modèle. L'objet peut inclure des jetons, des attributs et des références, qui ne sont résolus que lors du déploiement. -
stack.templateOptions
(Python :template_options
) — À utiliser pour spécifier les options du AWS CloudFormation modèle, telles que Transform, Description et Metadata, pour votre pile.
Utilisation des piles
Les piles sont déployées sous forme de AWS CloudFormation pile dans un AWS environnement. L'environnement couvre un domaine spécifique Compte AWS et Région AWS.
Lorsque vous exécutez la cdk synth
commande pour une application comportant plusieurs piles, l'assemblage cloud inclut un modèle distinct pour chaque instance de pile. Même si les deux piles sont des instances de la même classe, elles sont émises AWS CDK sous forme de deux modèles individuels.
Vous pouvez synthétiser chaque modèle en spécifiant le nom de la pile dans la cdk synth
commande. L'exemple suivant synthétise le modèle pour stack1
:
$
cdk synthstack1
Cette approche est conceptuellement différente de la façon dont les AWS CloudFormation modèles sont normalement utilisés, où un modèle peut être déployé plusieurs fois et paramétré par le biais de paramètres.AWS CloudFormation Bien que AWS CloudFormation les paramètres puissent être définis dans le AWS CDK, ils sont généralement déconseillés car AWS CloudFormation les paramètres ne sont résolus que lors du déploiement. Cela signifie que vous ne pouvez pas déterminer leur valeur dans votre code.
Par exemple, pour inclure de manière conditionnelle une ressource dans votre application en fonction d'une valeur de paramètre, vous devez définir une AWS CloudFormation condition et l'associer à la ressource. AWS CDK Il adopte une approche dans laquelle les modèles concrets sont résolus au moment de la synthèse. Par conséquent, vous pouvez utiliser une if
instruction pour vérifier la valeur afin de déterminer si une ressource doit être définie ou si un comportement doit être appliqué.
Note
AWS CDK Il fournit autant de résolution que possible pendant le temps de synthèse afin de permettre une utilisation idiomatique et naturelle de votre langage de programmation.
Comme toute autre construction, les piles peuvent être composées en groupes. Le code suivant montre un exemple de service composé de trois piles : un plan de contrôle, un plan de données et des piles de surveillance. La structure du service est définie deux fois : une fois pour l'environnement bêta et une fois pour l'environnement de production.
import { App, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
interface EnvProps {
prod: boolean;
}
// imagine these stacks declare a bunch of related resources
class ControlPlane extends Stack {}
class DataPlane extends Stack {}
class Monitoring extends Stack {}
class MyService extends Construct {
constructor(scope: Construct, id: string, props?: EnvProps) {
super(scope, id);
// we might use the prod argument to change how the service is configured
new ControlPlane(this, "cp");
new DataPlane(this, "data");
new Monitoring(this, "mon"); }
}
const app = new App();
new MyService(app, "beta");
new MyService(app, "prod", { prod: true });
app.synth();
Cette AWS CDK application se compose finalement de six piles, trois pour chaque environnement :
$
cdk ls
betacpDA8372D3 betadataE23DB2BA betamon632BD457 prodcp187264CE proddataF7378CE5 prodmon631A1083
Les noms physiques des AWS CloudFormation piles sont automatiquement déterminés en AWS CDK fonction du chemin de construction de la pile dans l'arbre. Par défaut, le nom d'une pile est dérivé de l'ID de construction de l'Stack
objet. Cependant, vous pouvez spécifier un nom explicite en utilisant l'stackName
accessoire (en Pythonstack_name
), comme suit.
new MyStack(this, 'not:a:stack:name', { stackName: 'this-is-stack-name' });
Utilisation des piles imbriquées
Une pile imbriquée est une pile CDK que vous créez dans une autre pile, connue sous le nom de pile parent. Vous créez des piles imbriquées à l'aide de cette construction. NestedStack
En utilisant des piles imbriquées, vous pouvez organiser les ressources sur plusieurs piles. Les piles imbriquées permettent également de contourner la limite de AWS CloudFormation 500 ressources pour les piles. Une pile imbriquée compte comme une seule ressource dans la pile qui la contient. Cependant, il peut contenir jusqu'à 500 ressources, y compris des piles imbriquées supplémentaires.
La portée d'une pile imbriquée doit être une NestedStack
construction Stack
or. La pile imbriquée n'a pas besoin d'être déclarée de manière lexicale dans sa pile parent. Il suffit de passer la pile parent comme premier paramètre (scope
) lors de l'instanciation de la pile imbriquée. Hormis cette restriction, la définition des constructions dans une pile imbriquée fonctionne exactement de la même manière que dans une pile ordinaire.
Au moment de la synthèse, la pile imbriquée est synthétisée dans son propre AWS CloudFormation modèle, qui est téléchargé dans le compartiment AWS CDK
intermédiaire lors du déploiement. Les piles imbriquées sont liées à leur pile parent et ne sont pas traitées comme des artefacts de déploiement indépendants. Ils ne sont pas répertoriés par cdk list
et ne peuvent pas être déployés parcdk
deploy
.
Avertissement
Les modifications apportées à la posture de sécurité ne sont pas affichées avant le déploiement pour les piles imbriquées. Ces informations ne sont affichées que pour les piles de niveau supérieur.