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.
Collaborez avec la AWS CDK bibliothèque
Importez et utilisez la AWS Cloud Development Kit (AWS CDK) bibliothèque pour définir votre AWS Cloud infrastructure avec un langage de programmation pris en charge.
Importer la AWS CDK bibliothèque
La AWS CDK bibliothèque est souvent désignée par TypeScript nom du package deaws-cdk-lib
. Le nom réel du package varie en fonction de la langue. Voici un exemple d'installation et d'importation de la CDK bibliothèque :
- TypeScript
-
Installation |
npm install aws-cdk-lib |
Import |
import * as cdk from 'aws-cdk-lib'; |
- JavaScript
-
Installation |
npm install aws-cdk-lib |
Import |
const cdk = require('aws-cdk-lib'); |
- Python
-
Installation |
python -m pip install aws-cdk-lib |
Import |
import aws_cdk as cdk |
- Java
-
Danspom.xml , ajoutez |
Groupe software.amazon.awscdk ; artefact aws-cdk-lib |
Import |
import software.amazon.awscdk.App; |
- C#
-
Installation |
dotnet add package Amazon.CDK.Lib |
Import |
using Amazon.CDK; |
- Go
-
Installation |
go get github.com/aws/aws-cdk-go/awscdk/v2 |
Import |
import (
"github.com/aws/aws-cdk-go/awscdk/v2"
)
|
La classe construct
de base et le code de support se trouvent dans la constructs
bibliothèque. Les constructions expérimentales, dont elles API sont encore en cours de perfectionnement, sont distribuées sous forme de modules distincts.
Utilisation de la AWS CDK API référence
Utilisez la AWS CDK APIréférence au fur et à mesure que vous développez avec le AWS CDK.
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 (props
argument des constructions) et les options.
-
Interfaces : les interfaces, dont les noms commencent tous par « I », définissent la fonctionnalité minimale absolue pour la construction ou autre classe correspondante. CDKutilise 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 de CDK 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 CDK version. 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 utilisant des ressources définies en dehors CDK des applications à 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 CDK application à 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 CDK application, vous devez donc 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 CDK définie, 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.
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 du AWS CDK CLI cdk init
commande, les dépendances pour les bibliothèques CDK principales et les 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 CDK dans TypeScript 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 CDK code y est écrite 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, 'amzn-s3-demo-bucket');
// Instantiate Bucket with bucketName and versioned properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
bucketName: 'amzn-s3-demo-bucket',
versioned: true,
});
// Instantiate Bucket with websiteRedirect, which has its own sub-properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
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, "amzn-s3-demo-bucket")
# Instantiate Bucket with bucket_name and versioned properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", bucket_name="amzn-s3-demo-bucket", versioned=true)
# Instantiate Bucket with website_redirect, which has its own sub-properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", 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, "amzn-s3-demo-bucket");
// Instantiate Bucket with bucketName and versioned properties
Bucket bucket = Bucket.Builder.create(self, "amzn-s3-demo-bucket")
.bucketName("amzn-s3-demo-bucket").versioned(true)
.build();
# Instantiate Bucket with websiteRedirect, which has its own sub-properties
Bucket bucket = Bucket.Builder.create(self, "amzn-s3-demo-bucket")
.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, "amzn-s3-demo-bucket");
// Instantiate Bucket with BucketName and Versioned properties
var bucket = Bucket(self, "amzn-s3-demo-bucket", new BucketProps {
BucketName = "amzn-s3-demo-bucket",
Versioned = true});
// Instantiate Bucket with WebsiteRedirect, which has its own sub-properties
var bucket = Bucket(self, "amzn-s3-demo-bucket", new BucketProps {
WebsiteRedirect = new WebsiteRedirect {
HostName = "aws.amazon.com"
}});
- Go
-
Pour créer une construction dans Go, appelez la fonction NewXxxxxx
où Xxxxxxx
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("amzn-s3-demo-bucket"), nil)
// Instantiate Bucket with BucketName and Versioned properties
bucket1 := awss3.NewBucket(stack, jsii.String("amzn-s3-demo-bucket"), &awss3.BucketProps{
BucketName: jsii.String("amzn-s3-demo-bucket"),
Versioned: jsii.Bool(true),
})
// Instantiate Bucket with WebsiteRedirect, which has its own sub-properties
bucket2 := awss3.NewBucket(stack, jsii.String("amzn-s3-demo-bucket"), &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
-
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'IAspect
interface 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())
}