Questa è la guida per sviluppatori AWS CDK v2. La versione precedente della CDK versione 1 è entrata in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Lavora con la AWS CDK libreria
Importa e usa la AWS Cloud Development Kit (AWS CDK) libreria per definire la tua Cloud AWS infrastruttura con un linguaggio di programmazione supportato.
Importa la AWS CDK libreria
La AWS CDK Biblioteca viene spesso definita come TypeScript nome del pacchetto diaws-cdk-lib
. Il nome effettivo del pacchetto varia in base alla lingua. Di seguito è riportato un esempio di come installare e importare la CDK libreria:
- TypeScript
-
Installa |
npm install aws-cdk-lib |
Import |
import * as cdk from 'aws-cdk-lib'; |
- JavaScript
-
Installa |
npm install aws-cdk-lib |
Import |
const cdk = require('aws-cdk-lib'); |
- Python
-
Installa |
python -m pip install aws-cdk-lib |
Import |
import aws_cdk as cdk |
- Java
-
Inpom.xml , aggiungi |
Grupposoftware.amazon.awscdk ; artefatto aws-cdk-lib |
Import |
import software.amazon.awscdk.App; |
- C#
-
Installa |
dotnet add package Amazon.CDK.Lib |
Import |
using Amazon.CDK; |
- Go
-
Installa |
go get github.com/aws/aws-cdk-go/awscdk/v2 |
Import |
import (
"github.com/aws/aws-cdk-go/awscdk/v2"
)
|
La classe construct
base e il codice di supporto si trovano nella constructs
libreria. I costrutti sperimentali, dove API sono ancora in fase di perfezionamento, sono distribuiti come moduli separati.
Utilizzo del riferimento AWS CDK API
Usa il AWS CDK APIriferimento mentre sviluppi con AWS CDK.
Il materiale di riferimento di ogni modulo è suddiviso nelle seguenti sezioni.
-
Panoramica: materiale introduttivo necessario conoscere per utilizzare il servizio nel AWS CDK, inclusi concetti ed esempi.
-
Costrutti: classi di libreria che rappresentano una o più risorse concrete. AWS Queste sono le risorse o i modelli «curati» (L2) (risorse L3) che forniscono un'interfaccia di alto livello con impostazioni predefinite valide.
-
Classi: classi non costruite che forniscono funzionalità utilizzate dai costrutti del modulo.
-
Strutture: strutture di dati (pacchetti di attributi) che definiscono la struttura di valori compositi come proprietà (l'props
argomento dei costrutti) e opzioni.
-
Interfacce: le interfacce, i cui nomi iniziano tutti con «I», definiscono la funzionalità minima assoluta per il costrutto o altra classe corrispondente. CDKUtilizza interfacce di costruzione per rappresentare AWS risorse definite all'esterno dell' AWS CDK app e referenziate da metodi come. Bucket.fromBucketArn()
-
Enumerazioni: raccolte di valori denominati da utilizzare per specificare determinati parametri di costruzione. L'utilizzo di un valore enumerato consente loro di verificare la validità di questi valori CDK durante la sintesi.
-
CloudFormation Risorse: questi costrutti L1, i cui nomi iniziano con «Cfn», rappresentano esattamente le risorse definite nelle specifiche. CloudFormation Vengono generati automaticamente in base a tale specifica ad ogni versione. CDK Ogni costrutto L2 o L3 incapsula una o più risorse. CloudFormation
-
CloudFormation Tipi di proprietà: la raccolta di valori denominati che definiscono le proprietà di ogni risorsa. CloudFormation
Interfacce confrontate con le classi di costruzione
AWS CDK Utilizza le interfacce in un modo specifico che potrebbe non essere ovvio anche se si ha familiarità con le interfacce come concetto di programmazione.
AWS CDK Supporta l'utilizzo di risorse definite all'esterno CDK delle applicazioni utilizzando metodi come. Bucket.fromBucketArn()
Le risorse esterne non possono essere modificate e potrebbero non avere tutte le funzionalità disponibili con le risorse definite nell'CDKapp utilizzando, ad esempio, la Bucket
classe. Le interfacce, quindi, rappresentano la funzionalità minima disponibile CDK per un determinato tipo di AWS risorsa, comprese le risorse esterne.
Quando si istanziano le risorse nella propria CDK app, quindi, è necessario utilizzare sempre classi concrete come. Bucket
Quando specificate il tipo di argomento che state accettando in uno dei vostri costrutti, usate il tipo di interfaccia, ad esempio IBucket
se siete pronti a gestire risorse esterne (ovvero, non avrete bisogno di cambiarle). Se avete bisogno di un costrutto CDK definito, specificate il tipo più generale che potete usare.
Alcune interfacce sono versioni minime di pacchetti di proprietà o di opzioni associati a classi specifiche, anziché costrutti. Tali interfacce possono essere utili quando si crea una sottoclasse per accettare argomenti da passare alla classe principale. Se avete bisogno di una o più proprietà aggiuntive, vi consigliamo di implementarle o derivarle da questa interfaccia o da un tipo più specifico.
Alcuni linguaggi di programmazione supportati da AWS CDK non dispongono di una funzionalità di interfaccia. In questi linguaggi, le interfacce sono solo classi ordinarie. È possibile identificarli con i loro nomi, che seguono lo schema di una «I» iniziale seguita dal nome di qualche altro costrutto (ad esempioIBucket
). Valgono le stesse regole.
Gestire le dipendenze
Le dipendenze per AWS CDK l'app o la libreria vengono gestite utilizzando strumenti di gestione dei pacchetti. Questi strumenti sono comunemente usati con i linguaggi di programmazione.
In genere, AWS CDK supporta lo strumento di gestione dei pacchetti standard o ufficiale del linguaggio, se presente. Altrimenti, AWS CDK supporterà la lingua più popolare o ampiamente supportata. Potresti anche essere in grado di utilizzare altri strumenti, specialmente se funzionano con gli strumenti supportati. Tuttavia, il supporto ufficiale per altri strumenti è limitato.
AWS CDK Supporta i seguenti gestori di pacchetti:
Lingua |
Strumento di gestione dei pacchetti supportato |
TypeScript/JavaScript |
NPM(Node Package Manager) o Yarn |
Python |
PIP(Package Installer per Python) |
Java |
Maven |
C# |
NuGet |
Go |
Moduli Go |
Quando crei un nuovo progetto utilizzando il AWS CDK CLI cdk init
comando, le dipendenze per le librerie CDK principali e i costrutti stabili vengono specificate automaticamente.
Per ulteriori informazioni sulla gestione delle dipendenze per i linguaggi di programmazione supportati, consulta quanto segue:
Confronto in AWS CDKTypeScript con altre lingue
TypeScript è stata la prima lingua supportata per lo sviluppo di AWS CDK applicazioni. Pertanto, viene scritta una notevole quantità di CDK codice di esempio TypeScript. Se state sviluppando in un'altra lingua, potrebbe essere utile confrontare il modo in cui il AWS CDK codice viene implementato TypeScript rispetto al vostro linguaggio preferito. Questo può aiutarti a utilizzare gli esempi in tutta la documentazione.
Importazione di un modulo
- TypeScript/JavaScript
-
TypeScript supporta l'importazione di un intero namespace o di singoli oggetti da un namespace. Ogni spazio dei nomi include costrutti e altre classi da utilizzare con un determinato servizio. 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
-
Ad esempio TypeScript, Python supporta le importazioni di moduli con namespace e le importazioni selettive. I namespace in Python assomigliano a aws_cdk. xxx, dove xxx rappresenta il nome AWS di un servizio, ad esempio s3 per Amazon S3. (Amazon S3 viene utilizzato in questi esempi).
# 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
-
Le importazioni di Java funzionano in modo diverso da quelle TypeScript di Java. Ogni istruzione di importazione importa un singolo nome di classe da un determinato pacchetto o tutte le classi definite in quel pacchetto (utilizzando*
). È possibile accedere alle classi utilizzando il nome della classe stessa, se è stata importata, o il nome della classe qualificata che include il relativo pacchetto.
Le librerie hanno lo software.amazon.awscdk.services.xxx
stesso nome della AWS Construct Library (la libreria principale èsoftware.amazon.awscdk
). L'ID del gruppo Maven per AWS CDK i pacchetti è. software.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#
-
In C#, si importano i tipi con la direttiva. using
Esistono due stili. Uno ti dà accesso a tutti i tipi nello spazio dei nomi specificato usando i loro nomi semplici. Con l'altro, puoi fare riferimento allo spazio dei nomi stesso usando un alias.
I pacchetti hanno lo stesso nome dei pacchetti Amazon.CDK.AWS.xxx
AWS Construct Library. (Il modulo principale èAmazon.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
-
Ogni modulo AWS Construct Library viene fornito come pacchetto 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(...)
Istanziazione di un costrutto
AWS CDK le classi construct hanno lo stesso nome in tutte le lingue supportate. La maggior parte dei linguaggi usa la new
parola chiave per istanziare una classe (Python e Go no). Inoltre, nella maggior parte delle lingue, la parola chiave this
si riferisce all'istanza corrente. (Python usa per self
convenzione.) Dovresti passare un riferimento all'istanza corrente come scope
parametro per ogni costrutto che crei.
Il terzo argomento di un AWS CDK costrutto è props
un oggetto contenente gli attributi necessari per creare il costrutto. Questo argomento può essere facoltativo, ma quando è richiesto, le lingue supportate lo gestiscono in modo idiomatico. I nomi degli attributi vengono inoltre adattati ai modelli di denominazione standard del linguaggio.
- 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 non usa una new
parola chiave per creare un'istanza di una classe. L'argomento delle proprietà è rappresentato utilizzando argomenti di parole chiave e gli argomenti sono denominati utilizzando. snake_case
Se un valore props è di per sé un insieme di attributi, è rappresentato da una classe che prende il nome dalla proprietà, che accetta argomenti di parole chiave per le sottoproprietà.
In Python, l'istanza corrente viene passata ai metodi come primo argomento, denominato self
per convenzione.
# 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
-
In Java, l'argomento props è rappresentato da una classe denominata XxxxProps
(ad esempio, BucketProps
per gli oggetti di scena del Bucket
costrutto). L'argomento props viene creato utilizzando un pattern builder.
Ogni XxxxProps
classe ha un builder. C'è anche un comodo generatore per ogni costrutto che costruisce gli oggetti di scena e il costrutto in un unico passaggio, come mostrato nell'esempio seguente.
Gli oggetti di scena hanno lo stesso nome di, using. TypeScript camelCase
// 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#
-
In C#, gli oggetti di scena vengono specificati utilizzando un inizializzatore di oggetti in una classe denominata XxxxProps
(ad esempio, BucketProps
per gli oggetti di scena del Bucket
costrutto).
Gli oggetti di scena sono denominati in modo simile a, tranne using. TypeScript PascalCase
È comodo usare la var
parola chiave quando si crea un'istanza di un costrutto, quindi non è necessario digitare il nome della classe due volte. Tuttavia, la guida allo stile del codice locale può variare.
// 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
-
Per creare un costrutto in Go, chiama la funzione NewXxxxxx
where Xxxxxxx
è il nome del costrutto. Le proprietà dei costrutti sono definite come una struttura.
In Go, tutti i parametri di costruzione sono puntatori, inclusi valori come numeri, valori booleani e stringhe. Usa le comode funzioni come jsii.String
per creare questi puntatori.
// 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"),
}})
Accesso ai membri
È comune fare riferimento ad attributi o proprietà di costrutti e altre AWS CDK classi e utilizzare questi valori come, ad esempio, input per creare altri costrutti. Le differenze di denominazione descritte in precedenza per i metodi si applicano anche qui. Inoltre, in Java, non è possibile accedere direttamente ai membri. Viene invece fornito un metodo getter.
- TypeScript/JavaScript
-
I nomi sonocamelCase
.
bucket.bucketArn
- Python
-
I nomi sonosnake_case
.
bucket.bucket_arn
- Java
-
Per ogni proprietà viene fornito un metodo getter; questi nomi sonocamelCase
.
bucket.getBucketArn()
- C#
-
I nomi sonoPascalCase
.
bucket.BucketArn
- Go
-
I nomi sonoPascalCase
.
bucket.BucketArn
Costanti Enum
Le costanti Enum rientrano nell'ambito di una classe e hanno nomi in maiuscolo con caratteri di sottolineatura in tutte le lingue (a volte denominate). SCREAMING_SNAKE_CASE
Poiché i nomi delle classi utilizzano lo stesso maiuscolo e minuscolo in tutte le lingue supportate tranne Go, anche i nomi enum qualificati sono gli stessi in queste lingue.
s3.BucketEncryption.KMS_MANAGED
In Go, le costanti enum sono attributi dello spazio dei nomi del modulo e sono scritte come segue.
awss3.BucketEncryption_KMS_MANAGED
Interfacce a oggetti
AWS CDK Utilizza interfacce a TypeScript oggetti per indicare che una classe implementa un insieme previsto di metodi e proprietà. È possibile riconoscere un'interfaccia a oggetti perché il suo nome inizia con. I
Una classe concreta indica le interfacce che implementa utilizzando la implements
parola chiave.
- TypeScript/JavaScript
-
JavaScript non ha una funzionalità di interfaccia. È possibile ignorare la implements
parola chiave e i nomi delle classi che la seguono.
import { IAspect, IConstruct } from 'aws-cdk-lib';
class MyAspect implements IAspect {
public visit(node: IConstruct) {
console.log('Visited', node.node.path);
}
}
- Python
-
Python non ha una funzionalità di interfaccia. Tuttavia, AWS CDK puoi indicare l'implementazione dell'interfaccia decorando la tua classe con. @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
-
Le strutture Go non hanno bisogno di dichiarare esplicitamente quali interfacce implementano. Il compilatore Go determina l'implementazione in base ai metodi e alle proprietà disponibili nella struttura. Ad esempio, nel codice seguente, MyAspect
implementa l'IAspect
interfaccia perché fornisce un Visit
metodo che accetta un costrutto.
type MyAspect struct {
}
func (a MyAspect) Visit(node constructs.IConstruct) {
fmt.Println("Visited", *node.Node().Path())
}