

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
<a name="resource-import-nested-stacks"></a>

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](using-cfn-nested-stacks.md).

CloudFormation ne prend en charge qu'un seul 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 AWS ressources dans une CloudFormation pile](import-resources-manually.md).

## Validation de l’importation d’une pile imbriquée
<a name="resource-import-nested-stacks-validation"></a>

Lors d'une opération d'importation de piles imbriquées, CloudFormation effectue les validations suivantes.
+ La définition `AWS::CloudFormation::Stack` imbriqué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::Stack` imbriquée dans le modèle de pile parent correspondent aux balises de la ressource imbriquée réelle.

## Imbriquez une pile existante à l'aide du AWS Management Console
<a name="resource-import-nested-stacks-console"></a>

1. Ajoutez la `AWS::CloudFormation::Stack` ressource au modèle de pile parent avec un `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html). Dans l’exemple de modèle de pile parent suivant, `MyNestedStack` est 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.template
         Parameters:
           InstanceType: t1.micro
           KeyName: mykey
   ```

1. Ouvrez la CloudFormation console.

1. 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)**.  
![\[Option Import resources into stack (Importer les ressources dans la pile) dans la console.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/stack-actions-import.png)

1. 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**.

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

1. Dans la page **Identify resources (Identifier les ressources)** identifiez la ressource `AWS::CloudFormation::Stack`.

   1. Sous **Identifier property (Propriété de l'identifiant)**, choisissez le type d'identifiant de ressource. Par exemple, une ressource `AWS::CloudFormation::Stack` peut être identifiée à l'aide de la propriété `StackId`.

   1. 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`.  
![\[Page d'identification des ressources de la console.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/resource-import-stackid.png)

   1. Choisissez **Suivant**.

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

1. Sur la *MyParentStack* page **Révision**, vérifiez que la bonne ressource est importée, puis choisissez **Importer des 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à.

1. Le panneau **Événements** de la page **Stack details (Détails de la pile)** pour votre pile parent s’affiche.  
![\[Onglet Événements de la console.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/import-events.png)
**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::Stack` a déjà été gérée par CloudFormation.

## Imbriquez une pile existante à l'aide du AWS CLI
<a name="resource-import-nested-stacks-cli"></a>

1. Ajoutez la `AWS::CloudFormation::Stack` ressource au modèle de pile parent avec un `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html). Dans l'exemple de modèle parent suivant, `MyNestedStack` est 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.template
         Parameters:
           InstanceType: t1.micro
           KeyName: mykey
   ```

1. Composez une chaîne JSON comme indiqué dans l’exemple suivant, avec les modifications suivantes : 
   + Remplacez *MyNestedStack* par l'ID logique de la ressource cible tel que spécifié dans le modèle.
   + *arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10*Remplacez-le par 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 *ResourcesToImport.txt* fichier contenant 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: MyNestedStack
     ResourceIdentifier:
       StackId: >-
         arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
   ```

1. 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 de **IMPORT**. 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-name MyParentStack --change-set-name ImportChangeSet \
       --change-set-type IMPORT \
       --template-body file://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-import` ne 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](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html#cli-usage-parameters-quoting-strings-containing) 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-import file://ResourcesToImport.txt
   ```

   Si 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"
   }
   ```

1. Vérifiez le jeu de modifications pour vous assurer que la pile correcte est importée.

   ```
   aws cloudformation describe-change-set --change-set-name ImportChangeSet
   ```

1. 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](cfn-console-create-stack.md#configure-stack-options) 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-name ImportChangeSet
   ```
**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::Stack` est déjà gérée par CloudFormation.