Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Importazione di un AWS CloudFormation modello esistente

Modalità Focus
Importazione di un AWS CloudFormation modello esistente - 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à.

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.CfnIncludecostrutto 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.

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.

TypeScript
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', }); } }
JavaScript
const cdk = require('aws-cdk-lib'); const cfninc = require('aws-cdk-lib/cloudformation-include'); class MyStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', }); } } module.exports = { MyStack }
Python
import aws_cdk as cdk from aws_cdk import cloudformation_include as cfn_inc from constructs import Construct class MyStack(cdk.Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) template = cfn_inc.CfnInclude(self, "Template", template_file="my-template.json")
Java
import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.cloudformation.include.CfnInclude; import software.constructs.Construct; public class MyStack extends Stack { public MyStack(final Construct scope, final String id) { this(scope, id, null); } public MyStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); CfnInclude template = CfnInclude.Builder.create(this, "Template") .templateFile("my-template.json") .build(); } }
C#
using Amazon.CDK; using Constructs; using cfnInc = Amazon.CDK.CloudFormation.Include; namespace MyApp { public class MyStack : Stack { internal MyStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { var template = new cfnInc.CfnInclude(this, "Template", new cfnInc.CfnIncludeProps { TemplateFile = "my-template.json" }); } } }
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:

TypeScript
const template = new cfninc.CfnInclude(this, 'MyConstruct', { templateFile: 'my-template.json', preserveLogicalIds: false });
JavaScript
const template = new cfninc.CfnInclude(this, 'MyConstruct', { templateFile: 'my-template.json', preserveLogicalIds: false });
Python
template = cfn_inc.CfnInclude(self, "Template", template_file="my-template.json", preserve_logical_ids=False)
Java
CfnInclude template = CfnInclude.Builder.create(this, "Template") .templateFile("my-template.json") .preserveLogicalIds(false) .build();
C#
var template = new cfnInc.CfnInclude(this, "Template", new cfn_inc.CfnIncludeProps { TemplateFile = "my-template.json", PreserveLogicalIds = false });
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

TypeScript
import * as cdk from 'aws-cdk-lib'; import { MyStack } from '../lib/my-stack'; const app = new cdk.App(); new MyStack(app, 'MyStack');
JavaScript
const cdk = require('aws-cdk-lib'); const { MyStack } = require('../lib/my-stack'); const app = new cdk.App(); new MyStack(app, 'MyStack');
Python
import aws_cdk as cdk from mystack.my_stack import MyStack app = cdk.App() MyStack(app, "MyStack")
Java
import software.amazon.awscdk.App; public class MyApp { public static void main(final String[] args) { App app = new App(); new MyStack(app, "MyStack"); } }
C#
using Amazon.CDK; namespace CdkApp { sealed class Program { public static void Main(string[] args) { var app = new App(); new MyStack(app, "MyStack"); } } }
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 diffcomanda 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:

TypeScript
const cfnBucket = template.getResource('amzn-s3-demo-bucket') as s3.CfnBucket;
JavaScript
const cfnBucket = template.getResource('amzn-s3-demo-bucket');
Python
cfn_bucket = template.get_resource("amzn-s3-demo-bucket")
Java
CfnBucket cfnBucket = (CfnBucket)template.getResource("amzn-s3-demo-bucket");
C#
var cfnBucket = (CfnBucket)template.GetResource("amzn-s3-demo-bucket");
const cfnBucket = template.getResource('amzn-s3-demo-bucket') as s3.CfnBucket;

Da questo esempio, ora cfnBucket è un'istanza della aws-s3.CfnBucketclasse. 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.Bucketistanza L2, utilizzate i metodi fromBucketArn()statici o. fromBucketAttributes()fromBucketName() In genere, il fromBucketName() metodo è più conveniente. Di seguito è riportato un esempio:

TypeScript
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);
JavaScript
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);
Python
bucket = s3.Bucket.from_bucket_name(self, "Bucket", cfn_bucket.ref)
Java
Bucket bucket = (Bucket)Bucket.fromBucketName(this, "Bucket", cfnBucket.getRef());
C#
var bucket = (Bucket)Bucket.FromBucketName(this, "Bucket", cfnBucket.Ref);
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:

TypeScript
bucket.grantWrite(lambdaFunc);
JavaScript
bucket.grantWrite(lambdaFunc);
Python
bucket.grant_write(lambda_func)
Java
bucket.grantWrite(lambdaFunc);
C#
bucket.GrantWrite(lambdaFunc);
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

TypeScript
const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', parameters: { 'UploadBucket': bucket.bucketArn, }, });
JavaScript
const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', parameters: { 'UploadBucket': bucket.bucketArn, }, });
Python
template = cfn_inc.CfnInclude(self, "Template", template_file="my-template.json", parameters=dict(UploadBucket=bucket.bucket_arn) )
Java
CfnInclude template = CfnInclude.Builder.create(this, "Template") .templateFile("my-template.json") .parameters(java.util.Map.of( // Map.of requires Java 9+ "UploadBucket", bucket.getBucketArn())) .build();
C#
var template = new cfnInc.CfnInclude(this, "Template", new cfnInc.CfnIncludeProps { TemplateFile = "my-template.json", Parameters = new Dictionary<string, string> { { "UploadBucket", bucket.BucketArn } } });
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'CfnIncludeoggetto:

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:

TypeScript
const param = template.getParameter('MyParameter'); param.default = "AWS CDK"
JavaScript
const param = template.getParameter('MyParameter'); param.default = "AWS CDK"
Python
param = template.get_parameter("MyParameter") param.default = "AWS CDK"
Java
CfnParameter param = template.getParameter("MyParameter"); param.setDefaultValue("AWS CDK")
C#
var cfnBucket = (CfnBucket)template.GetResource("amzn-s3-demo-bucket"); var param = template.GetParameter("MyParameter"); param.Default = "AWS CDK";
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" }
TypeScript
// 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', });
JavaScript
// 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('NestedStack', { templateFile: 'my-nested-template.json', });
Python
# include nested stack when importing main stack main_template = cfn_inc.CfnInclude(self, "MainStack", template_file="main-template.json", load_nested_stacks=dict(NestedStack= cfn_inc.CfnIncludeProps(template_file="nested-template.json"))) # or add it some time after importing the main stack nested_template = main_template.load_nested_stack("NestedStack", template_file="nested-template.json")
Java
CfnInclude mainTemplate = CfnInclude.Builder.create(this, "MainStack") .templateFile("main-template.json") .loadNestedStacks(java.util.Map.of( // Map.of requires Java 9+ "NestedStack", CfnIncludeProps.builder() .templateFile("nested-template.json").build())) .build(); // or add it some time after importing the main stack IncludedNestedStack nestedTemplate = mainTemplate.loadNestedStack("NestedTemplate", CfnIncludeProps.builder() .templateFile("nested-template.json") .build());
C#
// include nested stack when importing main stack var mainTemplate = new cfnInc.CfnInclude(this, "MainStack", new cfnInc.CfnIncludeProps { TemplateFile = "main-template.json", LoadNestedStacks = new Dictionary<string, cfnInc.ICfnIncludeProps> { { "NestedStack", new cfnInc.CfnIncludeProps { TemplateFile = "nested-template.json" } } } }); // or add it some time after importing the main stack var nestedTemplate = mainTemplate.LoadNestedStack("NestedTemplate", new cfnInc.CfnIncludeProps { TemplateFile = 'nested-template.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()

TypeScript
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;
JavaScript
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;
Python
nested_stack = main_template.get_nested_stack("NestedStack").stack
Java
NestedStack nestedStack = mainTemplate.getNestedStack("NestedStack").getStack();
C#
var nestedStack = mainTemplate.GetNestedStack("NestedStack").Stack;
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;

Il getNestedStack() metodo restituisce un'istanza. IncludedNestedStack Da questa istanza, è possibile accedere all' AWS CDK NestedStackistanza 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.

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.