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.
Imbrication d'une pile existante
Utilisez la fonction resource import pour imbriquer une pile existante dans une autre pile existante. Les piles imbriquées sont des composants courants que vous déclarez et référencez à partir d'autres modèles. Vous pouvez ainsi éviter de copier et coller les mêmes configurations dans vos modèles et simplifier les mises à jour des piles. Si vous disposez d'un modèle pour un composant commun, vous pouvez utiliser la ressource AWS::CloudFormation::Stack pour référencer ce modèle à partir d'un autre modèle. Pour de plus amples informations sur les piles imbriquées, veuillez consulter Diviser un modèle en éléments réutilisables à l’aide de piles imbriquées.
CloudFormation ne prend en charge qu'un niveau d'imbrication en utilisant resource import. Cela signifie que vous ne pouvez pas importer une pile dans une pile enfant ou importer une pile qui a des enfants.
Si vous découvrez l’importation, nous vous recommandons dans un premier temps de passer en revue les informations d’introduction de la rubrique Importation manuelle de ressources AWS dans une pile CloudFormation.
Validation de l'importation d'une pile imbriquée
Lors d'une opération d'importation d'une pile imbriquée, CloudFormation effectue les validations suivantes.
-
La définition
AWS::CloudFormation::Stackimbriquée dans le modèle de pile parent correspond au modèle de la pile imbriquée réelle. -
Les balises de la définition
AWS::CloudFormation::Stackimbriquée dans le modèle de pile parent correspondent aux balises de la ressource imbriquée réelle.
Imbrication d'une pile existante à l'aide de la AWS Management Console
-
Ajoutez la ressource
AWS::CloudFormation::Stackau modèle de pile parent avec un attribut DeletionPolicyRetain. Dans l’exemple de modèle de pile parent suivant,MyNestedStackest la cible de l’importation.JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "MyNestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template","Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey"} } } } }YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 MyNestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >-https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.templateParameters: InstanceType: t1.micro KeyName: mykey -
Ouvrez la console CloudFormation.
-
Sur la page Piles, sélectionnez la pile parent, choisissez Stack actions (Actions pour la pile), puis Import resources into stack (Importer les ressources dans la pile).
-
Lisez la page Vue d'ensemble de l'importation pour obtenir la liste des éléments que vous devez fournir dans le cadre de cette opération. Ensuite, choisissez Suivant.
-
Dans la page Specify template (Spécifier le modèle) indiquez le modèle parent mis à jour à l'aide de l'une des méthodes suivantes, puis choisissez Suivant.
-
Choisissez Amazon S3 URL (URL Amazon S3), puis spécifiez l'URL de votre modèle dans la zone de texte.
-
Choisissez Upload a template file (Charger un fichier de modèle), puis recherchez votre modèle.
-
-
Dans la page Identify resources (Identifier les ressources) identifiez la ressource
AWS::CloudFormation::Stack.-
Sous Identifier property (Propriété de l'identifiant), choisissez le type d'identifiant de ressource. Par exemple, une ressource
AWS::CloudFormation::Stackpeut être identifiée à l'aide de la propriétéStackId. -
Sous Valeur de l’identifiant, tapez l’ARN de la pile que vous importez. Par exemple,
.arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
-
Choisissez Suivant.
-
-
Dans la page Specify stack details (Spécifier les détails de la pile), modifiez les paramètres souhaités, puis choisissez Suivant. Un jeu de modifications est crée automatiquement.
Important
L'opération d'importation échoue si vous modifiez des paramètres existants qui lacent une opération de création, de mise à jour ou de suppression.
-
Sur la page Vérifier
MyParentStack, vérifiez que la ressource correcte est en cours d’importation, puis sélectionnez Importer les ressources. Le jeu de modifications créé à la dernière étape est alors automatiquement exécuté. Toutes les balises au niveau de la pile sont appliquées aux ressources importées à ce moment-là. -
Le panneau Événements de la page Stack details (Détails de la pile) pour votre pile parent s'affiche.
Note
Il n'est pas nécessaire d'exécuter la détection de l'écart sur la pile parent après cette opération d'importation, car la ressource
AWS::CloudFormation::Stacka déjà été gérée par CloudFormation.
Imbrication d'une pile existante à l'aide de la AWS CLI
-
Ajoutez la ressource
AWS::CloudFormation::Stackau modèle de pile parent avec un attribut DeletionPolicyRetain. Dans l'exemple de modèle parent suivant,MyNestedStackest la cible de l'importation.JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "MyNestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template","Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey"} } } } }YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1MyNestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >-https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.templateParameters: InstanceType: t1.micro KeyName: mykey -
Composez une chaîne JSON comme indiqué dans l’exemple suivant, avec les modifications suivantes :
-
Remplacez
MyNestedStackpar l’ID logique de la ressource cible, tel que spécifié dans le modèle. -
Remplacez
arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10par l’ARN de la pile que vous souhaitez importer.
[{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]Vous pouvez également spécifier les paramètres dans un fichier de configuration.
Par exemple, pour importer
MyNestedStack, vous pouvez créer un fichierResourcesToImport.txtcontenant la configuration suivante.JSON
[ { "ResourceType":"AWS::CloudFormation::Stack", "LogicalResourceId":"MyNestedStack", "ResourceIdentifier": { "StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10" } } ]YAML
ResourceType: 'AWS::CloudFormation::Stack' LogicalResourceId:MyNestedStackResourceIdentifier: StackId: >-arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10 -
-
Pour créer un ensemble de modifications, utilisez la commande create-change-set suivante et remplacez le texte de l’espace réservé. Pour l’option
--change-set-type, indiquez une valeur deIMPORT. Pour l’option--resources-to-import, remplacez l’exemple de chaîne JSON par la chaîne JSON que vous venez de créer.aws cloudformation create-change-set \ --stack-nameMyParentStack--change-set-nameImportChangeSet\ --change-set-typeIMPORT\ --template-bodyfile://TemplateToImport.json\ --resources-to-import'[{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]'Note
--resources-to-importne prend pas en charge le YAML en ligne. Les exigences relatives aux guillemets d’échappement dans la chaîne JSON varient en fonction de votre terminal. Pour plus d’informations, consultez la section Utilisation des guillemets dans les chaînes de caractères du Guide de l’utilisateur AWS Command Line Interface.Vous pouvez également utiliser l’URL d’un fichier en entrée pour l’option
--resources-to-import, comme indiqué dans l’exemple suivant.--resources-to-importfile://ResourcesToImport.txtSi elle aboutit, cette commande renvoie un résultat similaire à ce qui suit.
{ "Id": "arn:aws:cloudformation:us-west-2:12345678910:changeSet/ImportChangeSet/8ad75b3f-665f-46f6-a200-0b4727a9442e", "StackId": "arn:aws:cloudformation:us-west-2:12345678910:stack/MyParentStack/4e345b70-1281-11ef-b027-027366d8e82b" } -
Vérifiez le jeu de modifications pour vous assurer que la pile correcte est importée.
aws cloudformation describe-change-set --change-set-nameImportChangeSet -
Pour lancer l’ensemble de modifications et importer la pile dans la pile parent source, utilisez la commande execute-change-set suivante et remplacez le texte de l’espace réservé. Toutes les balises au niveau de la pile sont appliquées aux ressources importées à ce moment-là. Une fois l'opération d'importation
(IMPORT_COMPLETE)terminée, la pile est imbriquée avec succès.aws cloudformation execute-change-set --change-set-nameImportChangeSetNote
Il n'est pas nécessaire d'exécuter la détection de l'écart sur la pile parent après cette opération d'importation, car la ressource
AWS::CloudFormation::Stackest déjà gérée par CloudFormation.