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 constructions sont les éléments de base des AWS Cloud Development Kit (AWS CDK) applications. Une construction est un composant de votre application qui représente une ou plusieurs AWS CloudFormation ressources et leur configuration. Vous créez votre application, pièce par pièce, en important et en configurant des constructions.
Importer et utiliser des constructions
Les constructions sont des classes que vous importez dans vos applications CDK depuis la bibliothèque de constructions AWS . Vous pouvez également créer et distribuer vos propres constructions, ou utiliser des constructions créées par des développeurs tiers.
Les constructions font partie du modèle de programmation des constructions (CPM). Ils peuvent être utilisés avec d'autres outils tels que CDK pour Terraform (CDKtf), CDK pour Kubernetes (CDK8s), et Projen.
De nombreux tiers ont également publié des constructions compatibles avec le AWS CDK. Visitez Construct Hub
Construisez des niveaux
Les constructions de la bibliothèque AWS de constructions sont classées en trois niveaux. Chaque niveau offre un niveau d'abstraction croissant. Plus l'abstraction est élevée, plus la configuration est facile et nécessite moins d'expertise. Plus l'abstraction est faible, plus la personnalisation est importante, ce qui nécessite plus d'expertise.
- Constructions de niveau 1 (L1)
-
Les constructions L1, également appelées ressources CFN, sont les constructions de niveau inférieur et n'offrent aucune abstraction. Chaque construction L1 renvoie directement à une seule AWS CloudFormation ressource. Avec les constructions L1, vous importez une construction qui représente une ressource spécifique AWS CloudFormation . Vous définissez ensuite les propriétés de la ressource dans votre instance de construction.
Les constructions L1 sont idéales à utiliser lorsque vous connaissez les propriétés de vos AWS ressources AWS CloudFormation et que vous avez besoin d'un contrôle total sur leur définition.
Dans la AWS bibliothèque de constructions, les constructions L1 sont nommées en commençant par
Cfn
, suivi d'un identifiant pour la AWS CloudFormation ressource qu'elles représentent. Par exemple, laCfnBucket
construction est une construction L1 qui représente uneAWS::S3::Bucket
AWS CloudFormation ressource.Les constructions L1 sont générées à partir de la spécification de la AWS CloudFormation ressource. Si une ressource existe dans AWS CloudFormation, elle sera disponible AWS CDK sous forme de construction L1. Les nouvelles ressources ou propriétés peuvent prendre jusqu'à une semaine pour être disponibles dans la bibliothèque AWS Construct. Pour plus d'informations, consultez la référence aux types de AWS ressources et de propriétés dans le guide de AWS CloudFormation l'utilisateur.
- Constructions de niveau 2 (L2)
-
Les constructions L2, également appelées constructions sélectionnées, sont soigneusement développées par l'équipe CDK et sont généralement le type de construction le plus utilisé. Les constructions L2 correspondent directement à des AWS CloudFormation ressources uniques, comme les constructions L1. Par rapport aux constructions L1, les constructions L2 fournissent une abstraction de niveau supérieur grâce à une API intuitive basée sur l'intention. Les constructions L2 incluent des configurations de propriétés par défaut judicieuses, des politiques de sécurité conformes aux meilleures pratiques et génèrent une grande partie du code standard et de la logique de collage pour vous.
Les constructions L2 fournissent également des méthodes d'assistance pour la plupart des ressources qui simplifient et accélèrent la définition des propriétés, des autorisations, des interactions basées sur des événements entre les ressources, etc.
La
s3.Bucket
classe est un exemple de construction L2 pour une ressource de bucket Amazon Simple Storage Service (Amazon S3).La AWS bibliothèque de constructions contient des constructions L2 désignées comme stables et prêtes à être utilisées en production. Pour les constructions L2 en cours de développement, elles sont désignées comme expérimentales et proposées dans un module distinct.
- Constructions de niveau 3 (L3)
-
Les constructions L3, également appelées modèles, constituent le plus haut niveau d'abstraction. Chaque construction L3 peut contenir un ensemble de ressources configurées pour fonctionner ensemble afin d'accomplir une tâche ou un service spécifique au sein de votre application. Les constructions L3 sont utilisées pour créer des AWS architectures complètes pour des cas d'utilisation particuliers dans votre application.
Pour fournir des conceptions de système complètes ou des parties importantes d'un système plus vaste, les constructions L3 proposent des configurations de propriétés par défaut bien définies. Ils sont construits autour d'une approche particulière visant à résoudre un problème et à fournir une solution. Avec les constructions L3, vous pouvez créer et configurer plusieurs ressources rapidement, avec un minimum d'entrées et de code.
La
ecsPatterns.ApplicationLoadBalancedFargateService
classe est un exemple de construction L3 qui représente un AWS Fargate service exécuté sur un cluster Amazon Elastic Container Service (Amazon ECS) et dirigé par un équilibreur de charge d'application.À l'instar des constructions L2, les constructions L3 prêtes à être utilisées en production sont incluses dans la bibliothèque de constructions. AWS Les modules en cours de développement sont proposés dans des modules distincts.
Définition de constructions
Montage
La composition est le modèle clé pour définir des abstractions de haut niveau par le biais de constructions. Une construction de haut niveau peut être composée d'un nombre quelconque de constructions de niveau inférieur. Du bas vers le haut, vous utilisez des structures pour organiser les AWS ressources individuelles que vous souhaitez déployer. Vous utilisez les abstractions qui conviennent à votre objectif, avec autant de niveaux que vous le souhaitez.
Avec la composition, vous définissez des composants réutilisables et vous les partagez comme n'importe quel autre code. Par exemple, une équipe peut définir une construction qui met en œuvre les meilleures pratiques de l'entreprise pour une table Amazon DynamoDB, notamment la sauvegarde, la réplication globale, le dimensionnement automatique et la surveillance. L'équipe peut partager le concept en interne avec d'autres équipes ou en public.
Les équipes peuvent utiliser des constructions comme n'importe quel autre package de bibliothèque. Lorsque la bibliothèque est mise à jour, les développeurs ont accès aux améliorations et aux corrections de bogues de la nouvelle version, comme pour toute autre bibliothèque de code.
Initialisation
Les constructions sont implémentées dans des classes qui étendent la classe de base Construct
. Vous définissez une construction en instanciant la classe. Toutes les constructions prennent trois paramètres lorsqu'elles sont initialisées :
-
scope — Le parent ou le propriétaire de la construction. Il peut s'agir d'une pile ou d'une autre construction. La portée détermine la place de la construction dans l'arbre de construction. Vous devez généralement transmettre
this
self
Python), qui représente l'objet actuel, pour le scope. -
id — Identifiant qui doit être unique dans le champ d'application. L'identifiant sert d'espace de noms pour tout ce qui est défini dans la construction. Il est utilisé pour générer des identifiants uniques, tels que des noms de ressources et des éléments AWS CloudFormation logiques IDs.
Les identifiants doivent uniquement être uniques au sein d'un périmètre. Cela vous permet d'instancier et de réutiliser des constructions sans vous soucier des constructions et des identifiants qu'elles peuvent contenir, et de composer des constructions sous forme d'abstractions de niveau supérieur. De plus, les portées permettent de faire référence à des groupes de constructions en une seule fois. Les exemples incluent le balisage ou la spécification de l'endroit où les constructions seront déployées.
-
props — Ensemble de propriétés ou d'arguments de mots clés, selon le langage, qui définissent la configuration initiale de la construction. Les constructions de niveau supérieur fournissent davantage de valeurs par défaut, et si tous les éléments accessoires sont facultatifs, vous pouvez complètement omettre le paramètre props.
Configuration
La plupart des constructions acceptent props
comme troisième argument (ou en Python, des arguments de mots clés) une collection nom/valeur qui définit la configuration de la construction. L'exemple suivant définit un bucket avec le chiffrement AWS Key Management Service (AWS KMS) et l'hébergement statique de sites Web activés. Comme elle ne spécifie pas explicitement de clé de chiffrement, la Bucket
construction en définit une nouvelle kms.Key
et l'associe au bucket.
new s3.Bucket(this, 'MyEncryptedBucket', {
encryption: s3.BucketEncryption.KMS,
websiteIndexDocument: 'index.html'
});
Interaction avec les constructions
Les constructions sont des classes qui étendent la classe Construct de base. Après avoir instancié une construction, l'objet de construction expose un ensemble de méthodes et de propriétés qui vous permettent d'interagir avec la construction et de la transmettre comme référence à d'autres parties du système.
Le AWS CDK framework n'impose aucune restriction sur APIs les constructions. Les auteurs peuvent définir l'API de leur choix. Cependant, les AWS constructions incluses dans la AWS bibliothèque de constructions, telles ques3.Bucket
, suivent les directives et les modèles courants. Cela garantit une expérience cohérente sur toutes les AWS ressources.
La plupart AWS des constructions comportent un ensemble de méthodes d'octroi que vous pouvez utiliser pour accorder des autorisations AWS Identity and Access Management (IAM) sur cette construction à un principal. L'exemple suivant accorde au groupe IAM data-science
l'autorisation de lire depuis le compartiment Amazon S3raw-data
.
const rawData = new s3.Bucket(this, 'raw-data');
const dataScience = new iam.Group(this, 'data-science');
rawData.grantRead(dataScience);
Un autre modèle courant est que AWS les constructions définissent l'un des attributs de la ressource à partir de données fournies ailleurs. Les attributs peuvent inclure les noms des ressources Amazon (ARNs), les noms ou URLs.
Le code suivant définit une AWS Lambda fonction et l'associe à une file d'attente Amazon Simple Queue Service (Amazon SQS) via l'URL de la file d'attente dans une variable d'environnement.
const jobsQueue = new sqs.Queue(this, 'jobs');
const createJobLambda = new lambda.Function(this, 'create-job', {
runtime: lambda.Runtime.NODEJS_18_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('./create-job-lambda-code'),
environment: {
QUEUE_URL: jobsQueue.queueUrl
}
});
Pour plus d'informations sur les modèles d'API les plus courants de la bibliothèque AWS Construct, consultezLes ressources et le AWS CDK.
Structure de l'application et de la pile
Les Stack
classes App
et de la bibliothèque AWS de constructions sont des constructions uniques. Comparées à d'autres constructions, elles ne configurent pas AWS les ressources par elles-mêmes. Ils sont plutôt utilisés pour fournir un contexte à vos autres constructions. Toutes les constructions qui représentent AWS
des ressources doivent être définies, directement ou indirectement, dans le cadre d'une Stack
construction. Stack
les constructions sont définies dans le cadre d'une App
construction.
Pour en savoir plus sur les applications CDK, consultezAWS CDK applis. Pour en savoir plus sur les piles CDK, consultez. Présentation des AWS CDK piles
L'exemple suivant définit une application avec une pile unique. Au sein de la pile, une construction L2 est utilisée pour configurer une ressource de compartiment Amazon S3.
import { App, Stack, StackProps } from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
class HelloCdkStack extends Stack {
constructor(scope: App, id: string, props?: StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true
});
}
}
const app = new App();
new HelloCdkStack(app, "HelloCdkStack");
Travailler avec des constructions
Utilisation des constructions L1
Les constructions L1 mappent directement aux ressources individuelles AWS CloudFormation . Vous devez fournir la configuration requise pour la ressource.
Dans cet exemple, nous créons un bucket
objet à l'aide de la construction CfnBucket
L1 :
const bucket = new s3.CfnBucket(this, "amzn-s3-demo-bucket", {
bucketName: "amzn-s3-demo-bucket"
});
Les propriétés de construction qui ne sont pas de simples booléens, chaînes, nombres ou conteneurs sont traitées différemment dans les langues prises en charge.
const bucket = new s3.CfnBucket(this, "amzn-s3-demo-bucket", {
bucketName: "amzn-s3-demo-bucket",
corsConfiguration: {
corsRules: [{
allowedOrigins: ["*"],
allowedMethods: ["GET"]
}]
}
});
Important
Vous ne pouvez pas utiliser de types de propriétés L2 avec des constructions L1, ou vice versa. Lorsque vous travaillez avec des constructions L1, utilisez toujours les types définis pour la construction L1 que vous utilisez. N'utilisez pas de types provenant d'autres constructions L1 (certains peuvent porter le même nom, mais ils ne sont pas du même type).
Certaines de nos références d'API spécifiques au langage contiennent actuellement des erreurs dans les chemins d'accès aux types de propriétés L1, ou ne documentent pas du tout ces classes. Nous espérons pouvoir régler ce problème bientôt. En attendant, n'oubliez pas que ces types sont toujours des classes internes de la construction L1 avec laquelle ils sont utilisés.
Utilisation de constructions L2
Dans l'exemple suivant, nous définissons un compartiment Amazon S3 en créant un objet à partir de la construction Bucket
L2 :
import * as s3 from 'aws-cdk-lib/aws-s3';
// "this" is HelloCdkStack
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true
});
MyFirstBucket
n'est pas le nom du bucket AWS CloudFormation créé. Il s'agit d'un identifiant logique attribué à la nouvelle construction dans le contexte de votre application CDK. La valeur PhysicalName sera utilisée pour nommer la AWS CloudFormation ressource.
Utilisation de constructions tierces
Construct Hub
Écrire vos propres constructions
En plus d'utiliser des constructions existantes, vous pouvez également écrire vos propres constructions et permettre à n'importe qui de les utiliser dans ses applications. Toutes les constructions sont égales dans le AWS CDK. Les constructions de la AWS bibliothèque de constructions sont traitées de la même manière qu'une construction d'une bibliothèque tierce publiée via NPM, Maven, ou PyPI. Les constructions publiées dans le référentiel de packages interne de votre entreprise sont également traitées de la même manière.
Pour déclarer une nouvelle construction, créez une classe qui étend la classe de base Construct, dans le constructs
package, puis suivez le modèle pour les arguments de l'initialiseur.
L'exemple suivant montre comment déclarer une construction qui représente un compartiment Amazon S3. Le compartiment S3 envoie une notification Amazon Simple Notification Service (Amazon SNS) chaque fois que quelqu'un y télécharge un fichier.
export interface NotifyingBucketProps {
prefix?: string;
}
export class NotifyingBucket extends Construct {
constructor(scope: Construct, id: string, props: NotifyingBucketProps = {}) {
super(scope, id);
const bucket = new s3.Bucket(this, 'bucket');
const topic = new sns.Topic(this, 'topic');
bucket.addObjectCreatedNotification(new s3notify.SnsDestination(topic),
{ prefix: props.prefix });
}
}
Note
Notre NotifyingBucket
construction n'hérite pas de Bucket
mais plutôt deConstruct
. Nous utilisons la composition, et non l'héritage, pour regrouper un compartiment Amazon S3 et une rubrique Amazon SNS. En général, la composition est préférée à l'héritage lors du développement de AWS CDK constructions.
Le NotifyingBucket
constructeur possède une signature de construction typique : scope
id
, etprops
. Le dernier argumentprops
, est facultatif (obtient la valeur par défaut{}
) car tous les accessoires sont facultatifs. (La Construct
classe de base ne prend aucun props
argument.) Vous pouvez définir une instance de cette construction dans votre application sansprops
, par exemple :
new NotifyingBucket(this, 'MyNotifyingBucket');
Vous pouvez également utiliser props
(en Java, un paramètre supplémentaire) pour spécifier le préfixe de chemin à filtrer, par exemple :
new NotifyingBucket(this, 'MyNotifyingBucket', { prefix: 'images/' });
Généralement, vous souhaiterez également exposer certaines propriétés ou méthodes de vos constructions. Il n'est pas très utile d'avoir un sujet caché derrière votre construction, car les utilisateurs de votre construction ne peuvent pas s'y abonner. L'ajout d'une topic
propriété permet aux consommateurs d'accéder au sujet interne, comme illustré dans l'exemple suivant :
export class NotifyingBucket extends Construct {
public readonly topic: sns.Topic;
constructor(scope: Construct, id: string, props: NotifyingBucketProps) {
super(scope, id);
const bucket = new s3.Bucket(this, 'bucket');
this.topic = new sns.Topic(this, 'topic');
bucket.addObjectCreatedNotification(new s3notify.SnsDestination(this.topic), { prefix: props.prefix });
}
}
Désormais, les consommateurs peuvent s'abonner au sujet, par exemple :
const queue = new sqs.Queue(this, 'NewImagesQueue');
const images = new NotifyingBucket(this, '/images');
images.topic.addSubscription(new sns_sub.SqsSubscription(queue));
En savoir plus
La vidéo suivante fournit un aperçu complet des constructions CDK et explique comment les utiliser dans vos applications CDK.