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à.
I costrutti sono gli elementi costitutivi di base delle AWS Cloud Development Kit (AWS CDK) applicazioni. Un costrutto è un componente all'interno dell'applicazione che rappresenta una o più AWS CloudFormation risorse e la loro configurazione. Puoi creare la tua applicazione, pezzo per pezzo, importando e configurando costrutti.
Importa e usa costrutti
I costrutti sono classi che importate nelle applicazioni CDK dalla Construct Library.AWS Potete anche creare e distribuire costrutti personalizzati o utilizzare costrutti creati da sviluppatori di terze parti.
I costrutti fanno parte del Construct Programming Model (CPM). Sono disponibili per l'uso con altri strumenti come CDK for Terraform (CDKtf), CDK per Kubernetes (CDK8s) e Projen.
Numerose terze parti hanno inoltre pubblicato costrutti compatibili con. AWS CDK Visita Construct Hub
Costruisci livelli
I costrutti della AWS Construct Library sono suddivisi in tre livelli. Ogni livello offre un livello crescente di astrazione. Maggiore è l'astrazione, più facile è la configurazione e richiede meno esperienza. Più bassa è l'astrazione, maggiore è la personalizzazione disponibile, che richiede maggiore esperienza.
- Costrutti di livello 1 (L1)
-
I costrutti L1, noti anche come risorse CFN, sono i costrutti di livello più basso e non offrono alcuna astrazione. Ogni costrutto L1 è mappato direttamente su una singola risorsa. AWS CloudFormation Con i costrutti L1, si importa un costrutto che rappresenta una risorsa specifica. AWS CloudFormation Definite quindi le proprietà della risorsa all'interno dell'istanza del costrutto.
I costrutti L1 sono ottimi da usare quando si ha familiarità AWS CloudFormation e si ha bisogno del controllo completo sulla definizione delle proprietà delle risorse. AWS
Nella AWS Construct Library, i costrutti L1 sono denominati a partire da
Cfn
, seguiti da un identificatore per la risorsa che rappresentano. AWS CloudFormation Ad esempio, ilCfnBucket
costrutto è un costrutto L1 che rappresenta una risorsa.AWS::S3::Bucket
AWS CloudFormationI costrutti L1 vengono generati dalla specifica della risorsa.AWS CloudFormation Se una risorsa esiste in AWS CloudFormation, sarà disponibile AWS CDK come costrutto L1. La disponibilità di nuove risorse o proprietà nella AWS Construct Library può richiedere fino a una settimana. Per ulteriori informazioni, consultate il riferimento ai tipi di AWS risorse e proprietà nella Guida per l'AWS CloudFormation utente.
- Costrutti di livello 2 (L2)
-
I costrutti L2, noti anche come costrutti curati, sono sviluppati con cura dal team CDK e di solito sono il tipo di costrutto più utilizzato. I costrutti L2 vengono mappati direttamente su singole risorse, in modo simile ai costrutti L1. AWS CloudFormation Rispetto ai costrutti L1, i costrutti L2 forniscono un'astrazione di livello superiore tramite un'API intuitiva basata sugli intenti. I costrutti L2 includono configurazioni sensate delle proprietà predefinite, politiche di sicurezza basate sulle migliori pratiche e generano automaticamente gran parte del codice standard e della logica di incollaggio.
I costrutti L2 forniscono anche metodi di supporto per la maggior parte delle risorse che semplificano e velocizzano la definizione di proprietà, autorizzazioni, interazioni basate su eventi tra le risorse e altro ancora.
La
s3.Bucket
classe è un esempio di costrutto L2 per una risorsa bucket Amazon Simple Storage Service (Amazon S3).La AWS Construct Library contiene costrutti L2 designati stabili e pronti per l'uso in produzione. Per i costrutti L2 in fase di sviluppo, sono designati come sperimentali e offerti in un modulo separato.
- Costrutti di livello 3 (L3)
-
I costrutti L3, noti anche come pattern, rappresentano il livello di astrazione più elevato. Ogni costrutto L3 può contenere una raccolta di risorse configurate per funzionare insieme per eseguire un'attività o un servizio specifico all'interno dell'applicazione. I costrutti L3 vengono utilizzati per creare intere AWS architetture per casi d'uso particolari nell'applicazione.
Per fornire progetti di sistema completi o parti sostanziali di un sistema più grande, i costrutti L3 offrono configurazioni di proprietà predefinite ponderate. Sono costruiti attorno a un approccio particolare per risolvere un problema e fornire una soluzione. Con i costrutti L3, puoi creare e configurare più risorse rapidamente, con il minor numero di input e codice.
La
ecsPatterns.ApplicationLoadBalancedFargateService
classe è un esempio di costrutto L3 che rappresenta un AWS Fargate servizio in esecuzione su un cluster Amazon Elastic Container Service (Amazon ECS) e gestito da un sistema di bilanciamento del carico delle applicazioni.Analogamente ai costrutti L2, i costrutti L3 pronti per l'uso in produzione sono inclusi nella Construct Library. AWS Quelli in fase di sviluppo sono offerti in moduli separati.
Definizione dei costrutti
Composizione
La composizione è il modello chiave per definire astrazioni di livello superiore attraverso costrutti. Un costrutto di alto livello può essere composto da un numero qualsiasi di costrutti di livello inferiore. Da una prospettiva dal basso verso l'alto, si utilizzano i costrutti per organizzare le singole risorse che si desidera distribuire. AWS Utilizzate tutte le astrazioni più adatte al vostro scopo, con tutti i livelli necessari.
Con la composizione, definisci i componenti riutilizzabili e li condividi come qualsiasi altro codice. Ad esempio, un team può definire un costrutto che implementa le best practice aziendali per una tabella Amazon DynamoDB, tra cui backup, replica globale, scalabilità automatica e monitoraggio. Il team può condividere il costrutto internamente con altri team o pubblicamente.
I team possono utilizzare i costrutti come qualsiasi altro pacchetto di libreria. Quando la libreria viene aggiornata, gli sviluppatori hanno accesso ai miglioramenti e alle correzioni di bug della nuova versione, in modo simile a qualsiasi altra libreria di codici.
Inizializzazione
I costrutti sono implementati in classi che estendono la classe di base Construct
. Definite un costrutto istanziando la classe. Tutti i costrutti accettano tre parametri al momento dell'inizializzazione:
-
scope: il genitore o il proprietario del costrutto. Può trattarsi di una pila o di un altro costrutto. L'ambito determina la posizione del costrutto nell'albero del costrutto. Di solito dovresti passare
this
(in)self
Python), che rappresenta l'oggetto corrente, per l'ambito. -
id — Un identificatore che deve essere univoco all'interno dell'ambito. L'identificatore funge da namespace per tutto ciò che è definito all'interno del costrutto. Viene utilizzato per generare identificatori univoci, come nomi di risorse e dati logici. AWS CloudFormation IDs
Gli identificatori devono essere unici solo all'interno di un ambito. Ciò consente di creare istanze e riutilizzare i costrutti senza preoccuparsi dei costrutti e degli identificatori che potrebbero contenere e consente di comporre i costrutti in astrazioni di livello superiore. Inoltre, gli ambiti consentono di fare riferimento a gruppi di costrutti contemporaneamente. Gli esempi includono l'etichettatura o la specificazione di dove verranno distribuiti i costrutti.
-
props: un insieme di proprietà o argomenti di parole chiave, a seconda della lingua, che definiscono la configurazione iniziale del costrutto. I costrutti di livello superiore forniscono più impostazioni predefinite e, se tutti gli elementi prop sono opzionali, potete omettere completamente il parametro props.
Configurazione
La maggior parte dei costrutti accetta props
come terzo argomento (o in Python, argomenti di parole chiave), una raccolta di nomi/valori che definisce la configurazione del costrutto. L'esempio seguente definisce un bucket con crittografia AWS Key Management Service (AWS KMS) e hosting di siti Web statici abilitati. Poiché non specifica esplicitamente una chiave di crittografia, il Bucket
costrutto ne definisce una nuova kms.Key
e la associa al bucket.
new s3.Bucket(this, 'MyEncryptedBucket', {
encryption: s3.BucketEncryption.KMS,
websiteIndexDocument: 'index.html'
});
Interazione con i costrutti
I costrutti sono classi che estendono la classe Construct di base. Dopo aver creato un'istanza di un costrutto, l'oggetto construct espone un insieme di metodi e proprietà che consentono di interagire con il costrutto e di passarlo come riferimento ad altre parti del sistema.
Il AWS CDK framework non impone alcuna restrizione ai costrutti. APIs Gli autori possono definire qualsiasi API desiderino. Tuttavia, AWS i costrutti inclusi nella AWS Construct Library, ad esempios3.Bucket
, seguono linee guida e modelli comuni. Ciò fornisce un'esperienza coerente su tutte le AWS risorse.
La maggior parte dei AWS costrutti dispone di una serie di metodi di concessione che è possibile utilizzare per concedere le autorizzazioni AWS Identity and Access Management (IAM) su quel costrutto a un principale. L'esempio seguente concede al gruppo IAM l'data-science
autorizzazione alla lettura dal bucket Amazon raw-data
S3.
const rawData = new s3.Bucket(this, 'raw-data');
const dataScience = new iam.Group(this, 'data-science');
rawData.grantRead(dataScience);
Un altro schema comune prevede che AWS i costrutti impostino uno degli attributi della risorsa a partire dai dati forniti altrove. Gli attributi possono includere Amazon Resource Names (ARNs), nomi o URLs.
Il codice seguente definisce una AWS Lambda funzione e la associa a una coda Amazon Simple Queue Service (Amazon SQS) tramite l'URL della coda in una variabile di ambiente.
const jobsQueue = new sqs.Queue(this, 'jobs');
const createJobLambda = new lambda.Function(this, 'create-job', {
runtime: lambda.Runtime.NODEJS_18_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('./create-job-lambda-code'),
environment: {
QUEUE_URL: jobsQueue.queueUrl
}
});
Per informazioni sui modelli di API più comuni nella Construct Library, consulta AWS . Risorse e AWS CDK
L'app e lo stack costruiscono
Le Stack
classi App
e della AWS Construct Library sono costrutti unici. Rispetto ad altri costrutti, non configurano AWS le risorse da soli. Vengono invece utilizzati per fornire un contesto agli altri costrutti. Tutti i costrutti che rappresentano AWS
risorse devono essere definiti, direttamente o indirettamente, nell'ambito di un costrutto. Stack
Stack
i costrutti sono definiti nell'ambito di un costrutto. App
Per ulteriori informazioni sulle app CDK, consulta. AWS CDK app Per ulteriori informazioni sugli stack CDK, consulta. Introduzione agli AWS CDK stack
L'esempio seguente definisce un'app con un singolo stack. All'interno dello stack, viene utilizzato un costrutto L2 per configurare una risorsa bucket Amazon S3.
import { App, Stack, StackProps } from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
class HelloCdkStack extends Stack {
constructor(scope: App, id: string, props?: StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true
});
}
}
const app = new App();
new HelloCdkStack(app, "HelloCdkStack");
Lavorare con i costrutti
Lavorare con i costrutti L1
I costrutti L1 si collegano direttamente alle singole risorse. AWS CloudFormation È necessario fornire la configurazione richiesta per la risorsa.
In questo esempio, creiamo un bucket
oggetto utilizzando il CfnBucket
costrutto L1:
const bucket = new s3.CfnBucket(this, "amzn-s3-demo-bucket", {
bucketName: "amzn-s3-demo-bucket"
});
Le proprietà di costruzione che non sono semplici booleani, stringhe, numeri o contenitori vengono gestite in modo diverso nelle lingue supportate.
const bucket = new s3.CfnBucket(this, "amzn-s3-demo-bucket", {
bucketName: "amzn-s3-demo-bucket",
corsConfiguration: {
corsRules: [{
allowedOrigins: ["*"],
allowedMethods: ["GET"]
}]
}
});
Importante
Non è possibile utilizzare i tipi di proprietà L2 con i costrutti L1 o viceversa. Quando lavorate con i costrutti L1, utilizzate sempre i tipi definiti per il costrutto L1 che state utilizzando. Non utilizzate tipi di altri costrutti L1 (alcuni possono avere lo stesso nome, ma non sono dello stesso tipo).
Alcuni dei nostri riferimenti API specifici della lingua attualmente presentano errori nei percorsi dei tipi di proprietà L1 o non documentano affatto queste classi. Speriamo di risolvere il problema presto. Nel frattempo, ricorda che questi tipi sono sempre classi interne del costrutto L1 con cui vengono utilizzati.
Lavorare con costrutti L2
Nell'esempio seguente, definiamo un bucket Amazon S3 creando un oggetto dal costrutto L2: Bucket
import * as s3 from 'aws-cdk-lib/aws-s3';
// "this" is HelloCdkStack
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true
});
MyFirstBucket
non è il nome del bucket che crea. AWS CloudFormation È un identificatore logico assegnato al nuovo costrutto nel contesto dell'app CDK. Il valore PhysicalName verrà utilizzato per denominare la risorsa. AWS CloudFormation
Lavorare con costrutti di terze parti
Construct Hub
Scrivere i propri costrutti
Oltre a utilizzare costrutti esistenti, puoi anche scrivere i tuoi costrutti e consentire a chiunque di utilizzarli nelle proprie app. Tutti i costrutti sono uguali in. AWS CDK I costrutti della AWS Construct Library vengono trattati allo stesso modo di un costrutto di una libreria di terze parti pubblicata tramite NPM, Maven, oppure PyPI. Anche i costrutti pubblicati nell'archivio di pacchetti interno dell'azienda vengono trattati allo stesso modo.
Per dichiarare un nuovo costrutto, create una classe che estenda la classe base Construct nel constructs
pacchetto, quindi seguite lo schema per gli argomenti dell'inizializzatore.
L'esempio seguente mostra come dichiarare un costrutto che rappresenta un bucket Amazon S3. Il bucket S3 invia una notifica Amazon Simple Notification Service (Amazon SNS) ogni volta che qualcuno carica un file al suo interno.
export interface NotifyingBucketProps {
prefix?: string;
}
export class NotifyingBucket extends Construct {
constructor(scope: Construct, id: string, props: NotifyingBucketProps = {}) {
super(scope, id);
const bucket = new s3.Bucket(this, 'bucket');
const topic = new sns.Topic(this, 'topic');
bucket.addObjectCreatedNotification(new s3notify.SnsDestination(topic),
{ prefix: props.prefix });
}
}
Nota
Il nostro NotifyingBucket
costrutto non eredita da, ma piuttosto da. Bucket
Construct
Utilizziamo la composizione, non l'ereditarietà, per raggruppare un bucket Amazon S3 e un argomento Amazon SNS. In generale, la composizione è preferita all'ereditarietà quando si sviluppano costrutti. AWS CDK
Il NotifyingBucket
costruttore ha una tipica firma del costrutto:, e. scope
id
props
L'ultimo argomento,props
, è facoltativo (ottiene il valore predefinito{}
) perché tutti gli oggetti di scena sono opzionali. (La Construct
classe base non accetta props
argomenti.) Puoi definire un'istanza di questo costrutto nella tua app senzaprops
, ad esempio:
new NotifyingBucket(this, 'MyNotifyingBucket');
Oppure puoi usare props
(in Java, un parametro aggiuntivo) per specificare il prefisso del percorso su cui filtrare, ad esempio:
new NotifyingBucket(this, 'MyNotifyingBucket', { prefix: 'images/' });
In genere, dovresti anche esporre alcune proprietà o metodi sui tuoi costrutti. Non è molto utile avere un argomento nascosto dietro il costrutto, perché gli utenti del costrutto non sono in grado di sottoscriverlo. L'aggiunta di una topic
proprietà consente ai consumatori di accedere all'argomento interno, come mostrato nell'esempio seguente:
export class NotifyingBucket extends Construct {
public readonly topic: sns.Topic;
constructor(scope: Construct, id: string, props: NotifyingBucketProps) {
super(scope, id);
const bucket = new s3.Bucket(this, 'bucket');
this.topic = new sns.Topic(this, 'topic');
bucket.addObjectCreatedNotification(new s3notify.SnsDestination(this.topic), { prefix: props.prefix });
}
}
Ora i consumatori possono iscriversi all'argomento, ad esempio:
const queue = new sqs.Queue(this, 'NewImagesQueue');
const images = new NotifyingBucket(this, '/images');
images.topic.addSubscription(new sns_sub.SqsSubscription(queue));
Ulteriori informazioni
Il video seguente fornisce una panoramica completa dei costrutti CDK e spiega come utilizzarli nelle app CDK.