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 risorse da un AWS CloudFormation modello nelle tue AWS Cloud Development Kit (AWS CDK) applicazioni utilizzando il cloudformation-include.CfnInclude
costrutto per convertire le risorse in costrutti L1.
Dopo l'importazione, puoi utilizzare queste risorse nell'app nello stesso modo in cui faresti se fossero state originariamente definite nel codice. AWS CDK È inoltre possibile utilizzare questi costrutti L1 all'interno di costrutti di livello superiore AWS CDK . Ad esempio, questo può consentire di utilizzare i metodi di concessione delle autorizzazioni L2 con le risorse che definiscono.
Il cloudformation-include.CfnInclude
costrutto aggiunge essenzialmente un wrapper AWS CDK API a qualsiasi risorsa del modello. AWS CloudFormation Utilizzate questa funzionalità per importare i AWS CloudFormation modelli esistenti AWS CDK un pezzo alla volta. In questo modo, puoi gestire le risorse esistenti utilizzando AWS CDK costrutti per sfruttare i vantaggi delle astrazioni di livello superiore. Puoi anche utilizzare questa funzionalità per vendere i tuoi AWS CloudFormation modelli agli AWS CDK sviluppatori fornendo un'API di costruzione. AWS CDK
Nota
AWS CDK È inclusa anche la versione v1 aws-cdk-lib.CfnInclude
, precedentemente utilizzata per lo stesso scopo generale. Tuttavia, manca gran parte della funzionalità dicloudformation-include.CfnInclude
.
Argomenti
Importa un AWS CloudFormation modello
Di seguito è riportato un AWS CloudFormation modello di esempio che utilizzeremo per fornire esempi in questo argomento. Copia e salva il modello come my-template.json
da seguire. Dopo aver esaminato questi esempi, puoi approfondire ulteriormente utilizzando uno dei AWS CloudFormation modelli distribuiti esistenti. Puoi ottenerli dalla AWS CloudFormation
console.
{
"Resources": {
"amzn-s3-demo-bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "amzn-s3-demo-bucket",
}
}
}
}
Puoi lavorare con modelli JSON o YAML. Consigliamo JSON, se disponibile, poiché i parser YAML possono variare leggermente in base a ciò che accettano.
Di seguito è riportato un esempio di come importare il modello di esempio nell'app utilizzando. AWS CDK cloudformation-include
I modelli vengono importati nel contesto di uno stack CDK.
import * as cdk from 'aws-cdk-lib';
import * as cfninc from 'aws-cdk-lib/cloudformation-include';
import { Construct } from 'constructs';
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const template = new cfninc.CfnInclude(this, 'Template', {
templateFile: 'my-template.json',
});
}
}
Per impostazione predefinita, l'importazione di una risorsa preserva l'ID logico originale della risorsa dal modello. Questo comportamento è adatto per importare un AWS CloudFormation modello in AWS CDK, dove è IDs necessario mantenere la logica. AWS CloudFormation necessita di queste informazioni per riconoscere queste risorse importate come le stesse risorse del AWS CloudFormation modello.
Se state sviluppando un AWS CDK costrutto wrapper per il modello in modo che possa essere utilizzato da altri AWS CDK sviluppatori, chiedete invece di AWS CDK generare una nuova risorsa. IDs In questo modo, il costrutto può essere utilizzato più volte in uno stack senza conflitti di nomi. A tale scopo, impostate la preserveLogicalIds
proprietà su false
quando importate il modello. Di seguito è riportato un esempio:
const template = new cfninc.CfnInclude(this, 'MyConstruct', {
templateFile: 'my-template.json',
preserveLogicalIds: false
});
Per mettere le risorse importate sotto il controllo della tua AWS CDK app, aggiungi lo stack a: App
import * as cdk from 'aws-cdk-lib';
import { MyStack } from '../lib/my-stack';
const app = new cdk.App();
new MyStack(app, 'MyStack');
Per verificare che non vi siano modifiche involontarie alle AWS risorse nello stack, puoi eseguire una differenza. Usa il AWS CDK CLI cdk diff
comanda e omette qualsiasi AWS CDK metadato specifico. Di seguito è riportato un esempio:
cdk diff --no-version-reporting --no-path-metadata --no-asset-metadata
Dopo aver importato un AWS CloudFormation modello, l' AWS CDK app dovrebbe diventare la fonte di riferimento per le risorse importate. Per apportare modifiche alle tue risorse, modificale nell' AWS CDK app e distribuiscile con AWS CDK CLI cdk deploycomando.
Accedere alle risorse importate
Il nome template
nel codice di esempio rappresenta il AWS CloudFormation modello importato. Per accedere a una risorsa da esso, utilizzate il getResource()
metodo dell'oggetto. Per accedere alla risorsa restituita come tipo specifico di risorsa, trasmetti il risultato al tipo desiderato. Questo non è necessario in Python o. JavaScript Di seguito è riportato un esempio:
const cfnBucket = template.getResource('amzn-s3-demo-bucket') as s3.CfnBucket;
Da questo esempio, ora cfnBucket
è un'istanza della aws-s3.CfnBucket
classe. Si tratta di un costrutto L1 che rappresenta la risorsa corrispondente AWS CloudFormation . Puoi trattarlo come qualsiasi altra risorsa del suo tipo. Ad esempio, è possibile ottenere il relativo valore ARN con la bucket.attrArn
proprietà.
Per racchiudere invece la CfnBucket
risorsa L1 in un'aws-s3.Bucket
istanza L2, utilizzate i metodi fromBucketArn()
statici o. fromBucketAttributes()
fromBucketName()
In genere, il fromBucketName()
metodo è più conveniente. Di seguito è riportato un esempio:
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);
Altri costrutti L2 hanno metodi simili per creare il costrutto da una risorsa esistente.
Quando racchiudete un costrutto L1 in un costrutto L2, non viene creata una nuova risorsa. Dal nostro esempio, non stiamo creando un secondo bucket S3;. Invece, la nuova Bucket
istanza incapsula l'esistente. CfnBucket
Dall'esempio, ora bucket
è un costrutto L2 che si comporta come Bucket
qualsiasi altro costrutto L2. Ad esempio, è possibile concedere a una AWS Lambda funzione l'accesso in scrittura al bucket utilizzando il comodo metodo del bucket. grantWrite()
Non è necessario definire manualmente la policy AWS Identity and Access Management (IAM) necessaria. Di seguito è riportato un esempio:
bucket.grantWrite(lambdaFunc);
Sostituisci i parametri
Se il AWS CloudFormation modello contiene parametri, è possibile sostituirli con valori di fase di compilazione al momento dell'importazione utilizzando la parameters
proprietà. Nell'esempio seguente, sostituiamo il UploadBucket
parametro con l'ARN di un bucket definito altrove nel nostro codice. AWS CDK
const template = new cfninc.CfnInclude(this, 'Template', {
templateFile: 'my-template.json',
parameters: {
'UploadBucket': bucket.bucketArn,
},
});
Importa altri elementi del modello
Puoi importare qualsiasi elemento AWS CloudFormation del modello, non solo risorse. Gli elementi importati diventano parte dello AWS CDK
stack. Per importare questi elementi, utilizzate i seguenti metodi dell'CfnInclude
oggetto:
-
getCondition()
— AWS CloudFormation condizioni. -
getHook()
— AWS CloudFormation ganci per installazioni blu/verdi. -
getParameter()
— AWS CloudFormation parametri. -
getRule()
— AWS CloudFormation regole per i AWS Service Catalog modelli.
Ciascuno di questi metodi restituisce un'istanza di una classe che rappresenta il tipo specifico di AWS CloudFormation elemento. Questi oggetti sono mutabili. Le modifiche apportate ad essi verranno visualizzate nel modello generato dallo AWS CDK stack. Di seguito è riportato un esempio che importa un parametro dal modello e ne modifica il valore predefinito:
const param = template.getParameter('MyParameter');
param.default = "AWS CDK"
Importa pile annidate
È possibile importare gli stack nidificati specificandoli al momento dell'importazione del modello principale o in un momento successivo. Il modello nidificato deve essere archiviato in un file locale, ma deve essere utilizzato come NestedStack
risorsa nel modello principale. Inoltre, il nome della risorsa utilizzato nel AWS CDK codice deve corrispondere al nome utilizzato per lo stack nidificato nel modello principale.
Data questa definizione di risorsa nel modello principale, il codice seguente mostra come importare lo stack nidificato di riferimento in entrambi i modi.
"NestedStack": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/nested-stack.json"
}
// include nested stack when importing main stack
const mainTemplate = new cfninc.CfnInclude(this, 'MainStack', {
templateFile: 'main-template.json',
loadNestedStacks: {
'NestedStack': {
templateFile: 'nested-template.json',
},
},
});
// or add it some time after importing the main stack
const nestedTemplate = mainTemplate.loadNestedStack('NestedTemplate', {
templateFile: 'nested-template.json',
});
È possibile importare più stack annidati con entrambi i metodi. Quando si importa il modello principale, si fornisce una mappatura tra il nome della risorsa di ogni stack nidificato e il relativo file modello. Questa mappatura può contenere un numero qualsiasi di voci. Per farlo dopo l'importazione iniziale, chiama loadNestedStack()
una volta per ogni stack annidato.
Dopo aver importato uno stack nidificato, puoi accedervi utilizzando il metodo del modello principale. getNestedStack()
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;
Il getNestedStack()
metodo restituisce un'istanza. IncludedNestedStack
Da questa istanza, è possibile accedere all' AWS CDK NestedStack
istanza tramite la stack
proprietà, come mostrato nell'esempio. È inoltre possibile accedere all'oggetto AWS CloudFormation modello originale tramiteincludedTemplate
, da cui è possibile caricare risorse e altri AWS CloudFormation elementi.