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à.
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 con il suo 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 libreria CDK:
Installa | npm install aws-cdk-lib |
---|---|
Import | import * as cdk from 'aws-cdk-lib'; |
La classe construct
base e il codice di supporto si trovano nella constructs
libreria. I costrutti sperimentali, in cui l'API è ancora in fase di perfezionamento, vengono distribuiti come moduli separati.
Utilizzo dell'API Reference AWS CDK
Usa il riferimento all'AWS CDK API 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. 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.
Gestione delle 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 in AWS CDKTypeScript con altre lingue
TypeScript è stato il primo linguaggio supportato 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ò aiutarti a utilizzare gli esempi in tutta la documentazione.
Importazione di un modulo
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(...);
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(...)
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.
// 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 non usa una new
parola chiave per istanziare 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"))
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.
I nomi sonocamelCase
.
bucket.bucketArn
I nomi sonosnake_case
.
bucket.bucket_arn
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.
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 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)