Utilisation des langages AWS CDK de programmation pris en charge - AWS Cloud Development Kit (AWS CDK) v2

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.

Utilisation des langages AWS CDK de programmation pris en charge

Utilisez le AWS Cloud Development Kit (AWS CDK) pour définir votre AWS Cloud infrastructure avec un langage de programmation pris en charge.

Importation de la bibliothèque AWS Construct

AWS CDK Cela inclut la bibliothèque AWS Construct, une collection de constructions organisées par AWS service. Les constructions stables de la bibliothèque sont proposées dans un seul module, appelé par son nom de TypeScript package :aws-cdk-lib. Le nom réel du package varie en fonction de la langue.

TypeScript
Installation installation de npm aws-cdk-lib
Importer const cdk = require (« aws-cdk-lib ») ;
JavaScript
Installation installation de npm aws-cdk-lib
Importer const cdk = require (« aws-cdk-lib ») ;
Python
Installation installation de python -m pip aws-cdk-lib
Importer importer aws_cdk en tant que cdk
Java
Ajouter à pom.xml Group software.amazon.awscdk; artifact aws-cdk-lib
Importer import Software.Amazon.AWSCDK.app ; (for example)
C#
Installation dotnet ajouter le package Amazon.CDK.lib
Importer en utilisant Amazon.CDK ;

La classe construct de base et le code de support se trouvent dans le constructs module. Les constructions expérimentales, dont l'API est encore en cours de perfectionnement, sont distribuées sous forme de modules distincts.

La référence de AWS CDK l'API

La référence AWS CDK d'API fournit une documentation détaillée sur les constructions (et autres composants) de la bibliothèque. Une version de la référence d'API est fournie pour chaque langage de programmation pris en charge.

Le matériel de référence de chaque module est divisé dans les sections suivantes.

  • Vue d'ensemble : matériel d'introduction que vous devez connaître pour utiliser le service AWS CDK, y compris des concepts et des exemples.

  • Constructions : classes de bibliothèque qui représentent une ou plusieurs AWS ressources concrètes. Il s'agit de ressources ou de modèles « sélectionnés » (L2) (ressources L3) qui fournissent une interface de haut niveau avec des valeurs par défaut saines.

  • Classes : classes non construites qui fournissent les fonctionnalités utilisées par les constructions du module.

  • Structures : structures de données (ensembles d'attributs) qui définissent la structure des valeurs composites telles que les propriétés (propsargument des constructions) et les options.

  • Interfaces : les interfaces, dont les noms commencent tous par « I », définissent les fonctionnalités minimales absolues pour la construction ou autre classe correspondante. Le CDK utilise des interfaces de construction pour représenter les AWS ressources définies en dehors de votre AWS CDK application et référencées par des méthodes telles queBucket.fromBucketArn().

  • Enums : collections de valeurs nommées à utiliser pour spécifier certains paramètres de construction. L'utilisation d'une valeur énumérée permet au CDK de vérifier la validité de ces valeurs lors de la synthèse.

  • CloudFormation Ressources : Ces constructions L1, dont les noms commencent par « Cfn », représentent exactement les ressources définies dans la spécification. CloudFormation Ils sont automatiquement générés à partir de cette spécification à chaque version du CDK. Chaque construction L2 ou L3 encapsule une ou plusieurs ressources. CloudFormation

  • CloudFormation Types de propriétés : ensemble de valeurs nommées qui définissent les propriétés de chaque CloudFormation ressource.

Interfaces comparées aux classes de construction

Il AWS CDK utilise les interfaces d'une manière spécifique qui peut ne pas être évidente même si vous connaissez les interfaces en tant que concept de programmation.

Les AWS CDK supports utilisent des ressources définies en dehors des applications CDK à l'aide de méthodes telles queBucket.fromBucketArn(). Les ressources externes ne peuvent pas être modifiées et peuvent ne pas disposer de toutes les fonctionnalités disponibles avec les ressources définies dans votre application CDK à l'aide, par exemple, de la Bucket classe. Les interfaces représentent donc le strict minimum de fonctionnalités disponibles dans le CDK pour un type de AWS ressource donné, y compris les ressources externes.

Lorsque vous instanciez des ressources dans votre application CDK, vous devez toujours utiliser des classes concrètes telles que. Bucket Lorsque vous spécifiez le type d'argument que vous acceptez dans l'une de vos propres constructions, utilisez le type d'interface, par exemple IBucket si vous êtes prêt à gérer des ressources externes (c'est-à-dire que vous n'avez pas besoin de les modifier). Si vous avez besoin d'une construction définie par le CDK, spécifiez le type le plus général que vous pouvez utiliser.

Certaines interfaces sont des versions minimales de propriétés ou des ensembles d'options associés à des classes spécifiques, plutôt que des constructions. De telles interfaces peuvent être utiles lors du sous-classement pour accepter des arguments que vous transmettrez à votre classe parent. Si vous avez besoin d'une ou de plusieurs propriétés supplémentaires, vous devez implémenter ou dériver de cette interface, ou d'un type plus spécifique.

Note

Certains langages de programmation pris en charge par le AWS CDK n'ont pas de fonctionnalité d'interface. Dans ces langages, les interfaces ne sont que des classes ordinaires. Vous pouvez les identifier par leurs noms, qui suivent le schéma d'un « I » initial suivi du nom d'une autre construction (par exempleIBucket). Les mêmes règles s'appliquent.

Gestion des dépendances

Les dépendances de votre AWS CDK application ou de votre bibliothèque sont gérées à l'aide d'outils de gestion de packages. Ces outils sont couramment utilisés avec les langages de programmation.

Généralement, il AWS CDK prend en charge l'outil de gestion de paquets standard ou officiel du langage, s'il en existe un. Sinon, ils AWS CDK prendront en charge la langue la plus populaire ou la plus largement prise en charge. Vous pouvez également utiliser d'autres outils, en particulier s'ils fonctionnent avec les outils pris en charge. Cependant, le support officiel pour les autres outils est limité.

AWS CDK prend en charge les gestionnaires de packages suivants :

Langue Outil de gestion de packages pris en charge
TypeScript/JavaScript NPM (Node Package Manager) ou Yarn
Python PIP (Installateur de packages pour Python)
Java Maven
C# NuGet
Go Modules Go

Lorsque vous créez un nouveau projet à l'aide de la AWS CDK CLI cdk init commande, les dépendances des bibliothèques principales du CDK et des constructions stables sont automatiquement spécifiées.

Pour plus d'informations sur la gestion des dépendances pour les langages de programmation pris en charge, consultez les rubriques suivantes :

Comparaison AWS CDKTypeScript avec d'autres langues

TypeScript a été le premier langage pris en charge pour le développement AWS CDK d'applications. Par conséquent, une quantité importante d'exemples de code CDK est écrite dedans TypeScript. Si vous développez dans une autre langue, il peut être utile de comparer la façon dont le AWS CDK code est implémenté TypeScript par rapport à la langue de votre choix. Cela peut vous aider à utiliser les exemples tout au long de la documentation.

Importer un module

TypeScript/JavaScript

TypeScript prend en charge l'importation d'un espace de noms complet ou d'objets individuels à partir d'un espace de noms. Chaque espace de noms inclut des constructions et d'autres classes à utiliser avec un service donné AWS .

// Import main CDK library as cdk import * as cdk from 'aws-cdk-lib'; // ES6 import preferred in TS const cdk = require('aws-cdk-lib'); // Node.js require() preferred in JS // Import specific core CDK classes import { Stack, App } from 'aws-cdk-lib'; const { Stack, App } = require('aws-cdk-lib'); // Import AWS S3 namespace as s3 into current namespace import { aws_s3 as s3 } from 'aws-cdk-lib'; // TypeScript const s3 = require('aws-cdk-lib/aws-s3'); // JavaScript // Having imported cdk already as above, this is also valid const s3 = cdk.aws_s3; // Now use s3 to access the S3 types const bucket = s3.Bucket(...); // Selective import of s3.Bucket import { Bucket } from 'aws-cdk-lib/aws-s3'; // TypeScript const { Bucket } = require('aws-cdk-lib/aws-s3'); // JavaScript // Now use Bucket to instantiate an S3 bucket const bucket = Bucket(...);
Python

Par exemple TypeScript, Python prend en charge les importations de modules avec espace de noms et les importations sélectives. Les espaces de noms en Python ressemblent à aws_cdk. xxx, où xxx représente un nom AWS de service, tel que s3 pour Amazon S3. (Amazon S3 est utilisé dans ces exemples).

# Import main CDK library as cdk import aws_cdk as cdk # Selective import of specific core classes from aws_cdk import Stack, App # Import entire module as s3 into current namespace import aws_cdk.aws_s3 as s3 # s3 can now be used to access classes it contains bucket = s3.Bucket(...) # Selective import of s3.Bucket into current namespace from aws_cdk.s3 import Bucket # Bucket can now be used to instantiate a bucket bucket = Bucket(...)
Java

Les importations de Java fonctionnent différemment de celles TypeScript de Java. Chaque instruction d'importation importe soit un nom de classe unique à partir d'un package donné, soit toutes les classes définies dans ce package (en utilisant*). Les classes sont accessibles en utilisant soit le nom de classe lui-même s'il a été importé, soit le nom de classe qualifié, y compris son package.

Les bibliothèques portent le même nom que software.amazon.awscdk.services.xxx la bibliothèque AWS Construct (la bibliothèque principale estsoftware.amazon.awscdk). L'ID de groupe Maven pour les AWS CDK packages estsoftware.amazon.awscdk.

// Make certain core classes available import software.amazon.awscdk.Stack; import software.amazon.awscdk.App; // Make all Amazon S3 construct library classes available import software.amazon.awscdk.services.s3.*; // Make only Bucket and EventType classes available import software.amazon.awscdk.services.s3.Bucket; import software.amazon.awscdk.services.s3.EventType; // An imported class may now be accessed using the simple class name (assuming that name // does not conflict with another class) Bucket bucket = Bucket.Builder.create(...).build(); // We can always use the qualified name of a class (including its package) even without an // import directive software.amazon.awscdk.services.s3.Bucket bucket = software.amazon.awscdk.services.s3.Bucket.Builder.create(...) .build(); // Java 10 or later can use var keyword to avoid typing the type twice var bucket = software.amazon.awscdk.services.s3.Bucket.Builder.create(...) .build();
C#

En C#, vous importez des types avec la using directive. Il existe deux styles. L'un vous donne accès à tous les types de l'espace de noms spécifié en utilisant leurs noms simples. Avec l'autre, vous pouvez faire référence à l'espace de noms lui-même en utilisant un alias.

Les packages sont nommés de la même manière que Amazon.CDK.AWS.xxx les packages AWS Construct Library. (Le module de base estAmazon.CDK.)

// Make CDK base classes available under cdk using cdk = Amazon.CDK; // Make all Amazon S3 construct library classes available using Amazon.CDK.AWS.S3; // Now we can access any S3 type using its name var bucket = new Bucket(...); // Import the S3 namespace under an alias using s3 = Amazon.CDK.AWS.S3; // Now we can access an S3 type through the namespace alias var bucket = new s3.Bucket(...); // We can always use the qualified name of a type (including its namespace) even without a // using directive var bucket = new Amazon.CDK.AWS.S3.Bucket(...)
Go

Chaque module AWS Construct Library est fourni sous forme de package Go.

import ( "github.com/aws/aws-cdk-go/awscdk/v2" // CDK core package "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // AWS S3 construct library module ) // now instantiate a bucket bucket := awss3.NewBucket(...) // use aliases for brevity/clarity import ( cdk "github.com/aws/aws-cdk-go/awscdk/v2" // CDK core package s3 "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // AWS S3 construct library module ) bucket := s3.NewBucket(...)

Instanciation d'une construction

AWS CDK les classes de construction portent le même nom dans tous les langages pris en charge. La plupart des langages utilisent le new mot-clé pour instancier une classe (Python et Go ne le font pas). De plus, dans la plupart des langues, le mot clé this fait référence à l'instance actuelle. (Python l'utilise self par convention.) Vous devez transmettre une référence à l'instance actuelle comme scope paramètre de chaque construction que vous créez.

Le troisième argument d'une AWS CDK construction est props un objet contenant les attributs nécessaires à la construction de la construction. Cet argument peut être facultatif, mais lorsqu'il est requis, les langues prises en charge le gèrent de manière idiomatique. Les noms des attributs sont également adaptés aux modèles de dénomination standard de la langue.

TypeScript/JavaScript
// Instantiate default Bucket const bucket = new s3.Bucket(this, 'MyBucket'); // Instantiate Bucket with bucketName and versioned properties const bucket = new s3.Bucket(this, 'MyBucket', { bucketName: 'my-bucket', versioned: true, }); // Instantiate Bucket with websiteRedirect, which has its own sub-properties const bucket = new s3.Bucket(this, 'MyBucket', { websiteRedirect: {host: 'aws.amazon.com'}});
Python

Python n'utilise pas de new mot-clé lors de l'instanciation d'une classe. L'argument properties est représenté à l'aide d'arguments de mots clés, et les arguments sont nommés en utilisantsnake_case.

Si une valeur props est elle-même un ensemble d'attributs, elle est représentée par une classe nommée d'après la propriété, qui accepte les arguments par mot clé pour les sous-propriétés.

En Python, l'instance actuelle est transmise aux méthodes en tant que premier argument, nommé self par convention.

# Instantiate default Bucket bucket = s3.Bucket(self, "MyBucket") # Instantiate Bucket with bucket_name and versioned properties bucket = s3.Bucket(self, "MyBucket", bucket_name="my-bucket", versioned=true) # Instantiate Bucket with website_redirect, which has its own sub-properties bucket = s3.Bucket(self, "MyBucket", website_redirect=s3.WebsiteRedirect( host_name="aws.amazon.com"))
Java

En Java, l'argument props est représenté par une classe nommée XxxxProps (par exemple, BucketProps pour les accessoires de la Bucket construction). Vous créez l'argument props à l'aide d'un modèle de générateur.

Chaque XxxxProps classe possède un constructeur. Il existe également un générateur pratique pour chaque construction qui construit les accessoires et la construction en une seule étape, comme le montre l'exemple suivant.

Les accessoires portent le même nom que dans TypeScript, usingcamelCase.

// Instantiate default Bucket Bucket bucket = Bucket(self, "MyBucket"); // Instantiate Bucket with bucketName and versioned properties Bucket bucket = Bucket.Builder.create(self, "MyBucket") .bucketName("my-bucket").versioned(true) .build(); # Instantiate Bucket with websiteRedirect, which has its own sub-properties Bucket bucket = Bucket.Builder.create(self, "MyBucket") .websiteRedirect(new websiteRedirect.Builder() .hostName("aws.amazon.com").build()) .build();
C#

En C#, les accessoires sont spécifiés à l'aide d'un initialiseur d'objet pour une classe nommée XxxxProps (par exemple, BucketProps pour les accessoires de la Bucket construction).

Les accessoires sont nommés de la même manière que TypeScript, sauf en utilisantPascalCase.

Il est pratique d'utiliser le var mot-clé lors de l'instanciation d'une construction, vous n'avez donc pas besoin de taper le nom de la classe deux fois. Cependant, votre guide de style de code local peut varier.

// Instantiate default Bucket var bucket = Bucket(self, "MyBucket"); // Instantiate Bucket with BucketName and Versioned properties var bucket = Bucket(self, "MyBucket", new BucketProps { BucketName = "my-bucket", Versioned = true}); // Instantiate Bucket with WebsiteRedirect, which has its own sub-properties var bucket = Bucket(self, "MyBucket", new BucketProps { WebsiteRedirect = new WebsiteRedirect { HostName = "aws.amazon.com" }});
Go

Pour créer une construction dans Go, appelez la fonction NewXxxxxxXxxxxxx est le nom de la construction. Les propriétés des constructions sont définies en tant que structure.

Dans Go, tous les paramètres de construction sont des pointeurs, y compris des valeurs telles que des nombres, des booléens et des chaînes. Utilisez les fonctions pratiques telles que jsii.String la création de ces pointeurs.

// Instantiate default Bucket bucket := awss3.NewBucket(stack, jsii.String("MyBucket"), nil) // Instantiate Bucket with BucketName and Versioned properties bucket1 := awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ BucketName: jsii.String("my-bucket"), Versioned: jsii.Bool(true), }) // Instantiate Bucket with WebsiteRedirect, which has its own sub-properties bucket2 := awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ WebsiteRedirect: &awss3.RedirectTarget{ HostName: jsii.String("aws.amazon.com"), }})

Accès aux membres

Il est courant de faire référence aux attributs ou aux propriétés des constructions et autres AWS CDK classes et d'utiliser ces valeurs, par exemple, comme entrées pour créer d'autres constructions. Les différences de dénomination décrites précédemment pour les méthodes s'appliquent également ici. De plus, en Java, il n'est pas possible d'accéder directement aux membres. Au lieu de cela, une méthode getter est fournie.

TypeScript/JavaScript

Les noms sontcamelCase.

bucket.bucketArn
Python

Les noms sontsnake_case.

bucket.bucket_arn
Java

Une méthode getter est fournie pour chaque propriété ; ces noms sontcamelCase.

bucket.getBucketArn()
C#

Les noms sontPascalCase.

bucket.BucketArn
Go

Les noms sontPascalCase.

bucket.BucketArn

Constantes Enum

Les constantes Enum sont limitées à une classe et portent des noms en majuscules avec des traits de soulignement dans toutes les langues (parfois appelées). SCREAMING_SNAKE_CASE Étant donné que les noms de classe utilisent également le même boîtier dans toutes les langues prises en charge à l'exception de Go, les noms d'énumération qualifiés sont également les mêmes dans ces langues.

s3.BucketEncryption.KMS_MANAGED

Dans Go, les constantes enum sont des attributs de l'espace de noms du module et sont écrites comme suit.

awss3.BucketEncryption_KMS_MANAGED

Interfaces d'objets

AWS CDK Utilise des interfaces d' TypeScript objets pour indiquer qu'une classe implémente un ensemble attendu de méthodes et de propriétés. Vous pouvez reconnaître une interface d'objet car son nom commence parI. Une classe concrète indique les interfaces qu'elle implémente en utilisant le implements mot clé.

TypeScript/JavaScript
Note

JavaScript n'a pas de fonctionnalité d'interface. Vous pouvez ignorer le implements mot clé et les noms de classe qui le suivent.

import { IAspect, IConstruct } from 'aws-cdk-lib'; class MyAspect implements IAspect { public visit(node: IConstruct) { console.log('Visited', node.node.path); } }
Python

Python ne possède pas de fonctionnalité d'interface. Cependant, pour le, AWS CDK vous pouvez indiquer l'implémentation de l'interface en décorant votre classe avec@jsii.implements(interface).

from aws_cdk import IAspect, IConstruct import jsii @jsii.implements(IAspect) class MyAspect(): def visit(self, node: IConstruct) -> None: print("Visited", node.node.path)
Java
import software.amazon.awscdk.IAspect; import software.amazon.awscdk.IConstruct; public class MyAspect implements IAspect { public void visit(IConstruct node) { System.out.format("Visited %s", node.getNode().getPath()); } }
C#
using Amazon.CDK; public class MyAspect : IAspect { public void Visit(IConstruct node) { System.Console.WriteLine($"Visited ${node.Node.Path}"); } }
Go

Les structures Go n'ont pas besoin de déclarer explicitement les interfaces qu'elles implémentent. Le compilateur Go détermine l'implémentation en fonction des méthodes et des propriétés disponibles sur la structure. Par exemple, dans le code suivant, MyAspect implémente l'IAspectinterface car elle fournit une Visit méthode qui prend une construction.

type MyAspect struct { } func (a MyAspect) Visit(node constructs.IConstruct) { fmt.Println("Visited", *node.Node().Path()) }