Lavora con la AWS CDK libreria - AWS Cloud Development Kit (AWS CDK) v2

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'propsargomento 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.

Nota

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 initcomando, 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
Nota

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'IAspectinterfaccia 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()) }