Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Importer un AWS CloudFormation modèle existant

Mode de mise au point
Importer un AWS CloudFormation modèle existant - AWS Cloud Development Kit (AWS CDK) v2

Ceci est le guide du AWS CDK développeur de la version 2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Ceci est le guide du AWS CDK développeur de la version 2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Importez des ressources d'un AWS CloudFormation modèle dans vos AWS Cloud Development Kit (AWS CDK) applications en utilisant la cloudformation-include.CfnIncludeconstruction pour convertir les ressources en constructions L1.

Après l'importation, vous pouvez utiliser ces ressources dans votre application de la même manière que si elles étaient initialement définies dans le AWS CDK code. Vous pouvez également utiliser ces constructions L1 dans des constructions de niveau supérieur AWS CDK . Par exemple, cela peut vous permettre d'utiliser les méthodes d'octroi d'autorisations L2 avec les ressources qu'elles définissent.

La cloudformation-include.CfnInclude construction ajoute essentiellement un wrapper d' AWS CDK API à n'importe quelle ressource de votre AWS CloudFormation modèle. Utilisez cette fonctionnalité pour importer vos AWS CloudFormation modèles existants AWS CDK un par un. Ce faisant, vous pouvez gérer vos ressources existantes à l'aide de AWS CDK structures permettant de tirer parti des avantages des abstractions de haut niveau. Vous pouvez également utiliser cette fonctionnalité pour vendre vos AWS CloudFormation modèles aux AWS CDK développeurs en fournissant une API de AWS CDK construction.

Note

AWS CDK La v1 était également incluse aws-cdk-lib.CfnInclude, qui était auparavant utilisée dans le même but général. Cependant, il lui manque une grande partie des fonctionnalités decloudformation-include.CfnInclude.

Importer un AWS CloudFormation modèle

Voici un exemple de AWS CloudFormation modèle que nous utiliserons pour fournir des exemples dans cette rubrique. Copiez et enregistrez le modèle comme my-template.json suit. Après avoir étudié ces exemples, vous pouvez approfondir votre exploration en utilisant l'un de vos AWS CloudFormation modèles déployés existants. Vous pouvez les obtenir depuis la AWS CloudFormation console.

{ "Resources": { "amzn-s3-demo-bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "amzn-s3-demo-bucket", } } } }

Vous pouvez utiliser des modèles JSON ou YAML. Nous recommandons le format JSON s'il est disponible, car les analyseurs YAML peuvent légèrement varier quant à ce qu'ils acceptent.

Voici un exemple d'importation de l'exemple de modèle dans votre AWS CDK application à l'aide decloudformation-include. Les modèles sont importés dans le contexte d'une pile 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', }); } }

Par défaut, l'importation d'une ressource préserve l'ID logique d'origine de la ressource tel qu'il figure dans le modèle. Ce comportement convient à l'importation d'un AWS CloudFormation modèle dans le AWS CDK, où la logique IDs doit être conservée. AWS CloudFormation a besoin de ces informations pour reconnaître ces ressources importées comme étant les mêmes ressources que celles du AWS CloudFormation modèle.

Si vous développez un wrapper de AWS CDK construction pour le modèle afin qu'il puisse être utilisé par d'autres AWS CDK développeurs, demandez IDs plutôt de AWS CDK générer une nouvelle ressource. Ce faisant, la construction peut être utilisée plusieurs fois dans une pile sans conflits de noms. Pour ce faire, définissez la preserveLogicalIds propriété sur false lors de l'importation du modèle. Voici un exemple :

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

Pour placer les ressources importées sous le contrôle de votre AWS CDK application, ajoutez la pile à 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');

Pour vérifier qu'aucune modification involontaire n'est apportée aux AWS ressources de la pile, vous pouvez effectuer une différence. Utilisez le AWS CDK CLI cdk diffcommande et omettez toute AWS CDK métadonnée spécifique. Voici un exemple :

cdk diff --no-version-reporting --no-path-metadata --no-asset-metadata

Une fois que vous avez importé un AWS CloudFormation modèle, l' AWS CDK application doit devenir la source fiable de vos ressources importées. Pour apporter des modifications à vos ressources, modifiez-les dans votre AWS CDK application et déployez-les à l'aide du AWS CDK CLI cdk deploycommande.

Accès aux ressources importées

Le nom template figurant dans l'exemple de code représente le AWS CloudFormation modèle importé. Pour accéder à une ressource à partir de celui-ci, utilisez la getResource()méthode de l'objet. Pour accéder à la ressource renvoyée en tant que type de ressource spécifique, convertissez le résultat dans le type souhaité. Cela n'est pas nécessaire en Python ou JavaScript. Voici un exemple :

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;

À partir de cet exemple, cfnBucket il s'agit désormais d'une instance de la aws-s3.CfnBucketclasse. Il s'agit d'une construction L1 qui représente la AWS CloudFormation ressource correspondante. Vous pouvez la traiter comme n'importe quelle autre ressource de ce type. Par exemple, vous pouvez obtenir sa valeur ARN à l'aide de la bucket.attrArn propriété.

Pour encapsuler la CfnBucket ressource L1 dans une aws-s3.Bucketinstance L2 à la place, utilisez les méthodes statiques fromBucketArn()fromBucketAttributes(), ou. fromBucketName() Habituellement, la fromBucketName() méthode est la plus pratique. Voici un exemple :

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);

D'autres constructions L2 ont des méthodes similaires pour créer la construction à partir d'une ressource existante.

Lorsque vous encapsulez une construction L1 dans une construction L2, cela ne crée pas de nouvelle ressource. D'après notre exemple, nous ne créons pas un deuxième compartiment S3 ;. Au lieu de cela, la nouvelle Bucket instance encapsule l'instance existanteCfnBucket.

D'après l'exemple, bucket il s'agit désormais d'une Bucket construction L2 qui se comporte comme n'importe quelle autre construction L2. Par exemple, vous pouvez accorder à une AWS Lambda fonction l'accès en écriture au bucket en utilisant la grantWrite()méthode pratique du bucket. Il n'est pas nécessaire de définir manuellement la politique AWS Identity and Access Management (IAM) nécessaire. Voici un exemple :

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);

Remplacer les paramètres

Si votre AWS CloudFormation modèle contient des paramètres, vous pouvez les remplacer par des valeurs de temps de construction lors de l'importation en utilisant la parameters propriété. Dans l'exemple suivant, nous remplaçons le UploadBucket paramètre par l'ARN d'un bucket défini ailleurs dans notre AWS CDK code.

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, }, });

Importer d'autres éléments du modèle

Vous pouvez importer n'importe quel élément de AWS CloudFormation modèle, pas uniquement des ressources. Les éléments importés font partie de la AWS CDK pile. Pour importer ces éléments, utilisez les méthodes suivantes de l'CfnIncludeobjet :

Chacune de ces méthodes renvoie une instance d'une classe qui représente le type spécifique d' AWS CloudFormation élément. Ces objets sont mutables. Les modifications que vous leur apportez apparaîtront dans le modèle généré à partir de la AWS CDK pile. Voici un exemple d'importation d'un paramètre depuis le modèle et de modification de sa valeur par défaut :

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"

Importer des piles imbriquées

Vous pouvez importer des piles imbriquées en les spécifiant soit lors de l'importation de leur modèle principal, soit ultérieurement. Le modèle imbriqué doit être stocké dans un fichier local, mais référencé en tant que NestedStack ressource dans le modèle principal. En outre, le nom de ressource utilisé dans le AWS CDK code doit correspondre au nom utilisé pour la pile imbriquée dans le modèle principal.

Compte tenu de cette définition de ressource dans le modèle principal, le code suivant montre comment importer la pile imbriquée référencée dans les deux sens.

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

Vous pouvez importer plusieurs piles imbriquées avec l'une ou l'autre méthode. Lorsque vous importez le modèle principal, vous fournissez un mappage entre le nom de ressource de chaque pile imbriquée et son fichier modèle. Ce mappage peut contenir autant d'entrées que vous le souhaitez. Pour le faire après l'importation initiale, appelez loadNestedStack() une fois pour chaque pile imbriquée.

Après avoir importé une pile imbriquée, vous pouvez y accéder en utilisant la getNestedStack()méthode du modèle principal.

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;

La getNestedStack() méthode renvoie une IncludedNestedStackinstance. À partir de cette instance, vous pouvez accéder à l' AWS CDK NestedStackinstance via la stack propriété, comme indiqué dans l'exemple. Vous pouvez également accéder à l'objet AWS CloudFormation modèle d'origine via includedTemplate lequel vous pouvez charger des ressources et d'autres AWS CloudFormation éléments.

ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.