Lavorare con i AWS CDK linguaggi di programmazione supportati - AWS Cloud Development Kit (AWS CDK) v2

Questa è la guida per sviluppatori AWS CDK v2. Il vecchio CDK v1 è entrato 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à.

Lavorare con i AWS CDK linguaggi di programmazione supportati

Usa il AWS Cloud Development Kit (AWS CDK) per definire la tua Cloud AWS infrastruttura con un linguaggio di programmazione supportato.

Importazione della libreria AWS Construct

AWS CDK Include la AWS Construct Library, una raccolta di costrutti organizzati per servizio. AWS I costrutti stabili della libreria sono offerti in un singolo modulo, chiamato con il nome TypeScript del pacchetto:. aws-cdk-lib Il nome effettivo del pacchetto varia in base alla lingua.

TypeScript
Installa installazione di npm aws-cdk-lib
Importa const cdk = require (''); aws-cdk-lib
JavaScript
Installa installazione di npm aws-cdk-lib
Importa const cdk = require (''); aws-cdk-lib
Python
Installa installazione python -m pip aws-cdk-lib
Importa importa aws_cdk come cdk
Java
Aggiungi a pom.xml Group software.amazon.awscdk; artifact aws-cdk-lib
Importa importare software.amazon.awscdk.app; (for example)
C#
Installa dotnet aggiunge il pacchetto Amazon.cdk.lib
Importa utilizzando Amazon.cdk;

La classe construct base e il codice di supporto si trovano nel modulo. constructs I costrutti sperimentali, in cui l'API è ancora in fase di perfezionamento, vengono distribuiti come moduli separati.

Il riferimento all'API AWS CDK

L'AWS CDK API Reference fornisce una documentazione dettagliata dei costrutti (e di altri componenti) della libreria. Viene fornita una versione dell'API Reference per ogni linguaggio di programmazione supportato.

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. Il CDK utilizza 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 al CDK di verificare la validità di questi valori 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 con 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 delle applicazioni CDK 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'app CDK utilizzando, ad esempio, la Bucket classe. Le interfacce, quindi, rappresentano la funzionalità minima disponibile nel CDK per un determinato tipo di AWS risorsa, incluse le risorse esterne.

Quando si istanziano le risorse nell'app CDK, quindi, è necessario utilizzare sempre classi concrete come. Bucket Quando specificate il tipo di argomento che accettate 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 definito da CDK, 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 init comando, le dipendenze per le librerie principali del CDK e i costrutti stabili vengono specificate automaticamente.

Per ulteriori informazioni sulla gestione delle dipendenze per i linguaggi di programmazione supportati, consulta quanto segue:

Confronto AWS CDKTypeScript con altri linguaggi

TypeScript è stata la prima lingua supportata per lo sviluppo di AWS CDK applicazioni. Pertanto, è scritta una notevole quantità di codice CDK 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 linguaggio prescelto. Questo può aiutarvi 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, '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 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, "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

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, "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#

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, "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

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("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"), }})

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