

# Anidamiento de una pila existente
<a name="resource-import-nested-stacks"></a>

Utilice la función `resource import` para anidar una pila existente dentro de otra pila existente. Las pilas anidadas son componentes comunes a los que se declara y hace referencia desde otras plantillas. De esta forma, puede evitar copiar y pegar las mismas configuraciones en sus plantillas y simplificar las actualizaciones de pilas. Si tiene una plantilla para un componente común, puede utilizar el recurso `AWS::CloudFormation::Stack` para hacer referencia a esta plantilla desde otra plantilla. Para obtener más información sobre las pilas anidadas, consulte [División de una plantilla en piezas reutilizables utilizando pilas anidadas](using-cfn-nested-stacks.md).

CloudFormation solo admite un nivel de uso de anidamiento utilizando `resource import`. Esto significa que no puede importar una pila a una pila secundaria ni importar una pila que tenga secundarias.

Si es nuevo en la importación, le recomendamos que primero revise la información introductoria del tema [Cómo importar recursos de AWS a una pila de CloudFormation de forma manual](import-resources-manually.md).

## Validación de importación de pila anidada
<a name="resource-import-nested-stacks-validation"></a>

Durante una operación de importación de pila anidada, CloudFormation realiza las siguientes validaciones.
+ La definición anidada `AWS::CloudFormation::Stack` en la plantilla de pila principal coincide con la plantilla de la pila anidada real.
+ Las etiquetas de la definición anidada `AWS::CloudFormation::Stack` en la plantilla de pila principal coinciden con las etiquetas del recurso de pila anidado real.

## Anidar una pila existente mediante la Consola de administración de AWS
<a name="resource-import-nested-stacks-console"></a>

1. Agregue el recurso `AWS::CloudFormation::Stack` a la plantilla de pila principal con una `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html). En el siguiente plantilla de pila principal de ejemplo, `MyNestedStack` es el destino de la importación.

   **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. Abra la consola de CloudFormation.

1. En la página **Stacks (Pilas)**, con la pila principal seleccionada, elija **Stack actions (Acciones de pila)** y, a continuación, elija **Import resources into stack (Importar recursos a pila)**.  
![\[La opción Importar recursos a la pila en la consola.\]](http://docs.aws.amazon.com/es_es/AWSCloudFormation/latest/UserGuide/images/stack-actions-import.png)

1. Lea la página de **información general sobre la importación** para obtener una lista de los elementos que debe proporcionar durante esta operación. A continuación, elija **Siguiente**.

1. En la página **Specify template (Especificar plantilla)**, proporcione la plantilla principal actualizada mediante uno de los métodos siguientes y, a continuación, elija **Next (Siguiente)**.
   + Seleccione **URL de Amazon S3**, y, a continuación, especifique la URL de la plantilla en el cuadro de texto.
   + Seleccione **Cargar un archivo de plantilla** y, a continuación, busque la plantilla.

1. En la página **Identify resources (Identificar recursos)**, identifique el recurso `AWS::CloudFormation::Stack`.

   1. En **Propiedad del identificador**, elija el tipo de identificador de recurso. Por ejemplo, un recurso `AWS::CloudFormation::Stack` se puede identificar mediante la propiedad `StackId`.

   1. En **Valor del identificador**, escriba el ARN de la pila que va a importar. Por ejemplo, `arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10`.  
![\[La página Identificar recursos en la consola.\]](http://docs.aws.amazon.com/es_es/AWSCloudFormation/latest/UserGuide/images/resource-import-stackid.png)

   1. Elija **Siguiente**.

1. En la página **Especificar detalles de pila** modifique los parámetros y, a continuación, elija **Siguiente**. Esto crea automáticamente un conjunto de cambios.
**importante**  
La operación de importación produce un error si modifica parámetros que inician una operación de creación, actualización o eliminación.

1. En la página **Revisar *MyParentStack***, confirme que se está importando el recurso correcto y, a continuación, elija **Importar recursos**. Esto ejecuta automáticamente el conjunto de cambios creado en el último paso. En este momento, se aplican todas las etiquetas de nivel de pila a los recursos importados.

1. Se muestra el panel **Events (Eventos)** de la página **Stack details (Detalles de la pila)** de la pila principal.  
![\[La pestaña Eventos de la consola.\]](http://docs.aws.amazon.com/es_es/AWSCloudFormation/latest/UserGuide/images/import-events.png)
**nota**  
No es necesario ejecutar la detección de desviación en la pila principal después de esta operación de importación porque el recurso `AWS::CloudFormation::Stack` ya estaba administrado por CloudFormation.

## Anidar una pila existente mediante la AWS CLI
<a name="resource-import-nested-stacks-cli"></a>

1. Agregue el recurso `AWS::CloudFormation::Stack` a la plantilla de pila principal con una `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html). En el siguiente ejemplo, la plantilla principal `MyNestedStack` es el destino de la importación.

   **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. Componga una cadena JSON tal como se muestra en el siguiente ejemplo, con estas modificaciones: 
   + Sustituya *MyNestedStack* por el ID lógico del recurso de destino tal como se especifica en la plantilla.
   + Sustituya *arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10* por el ARN de la pila que desee importar.

   ```
   [{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]
   ```

   Si lo desea, también puede especificar los parámetros en un archivo de configuración. 

   Por ejemplo, para importar `MyNestedStack`, puede crear un archivo *ResourcesToImport.txt* que contenga la siguiente configuración.

   **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. Para crear un conjunto de cambios, utilice el siguiente comando **create-change-set** y sustituya el texto del marcador de posición. Para la opción `--change-set-type`, especifique un valor de **IMPORT**. Para la opción `--resources-to-import`, reemplace la cadena JSON de muestra por la cadena JSON real que acaba de crear.

   ```
   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"}}]'
   ```
**nota**  
`--resources-to-import` no es compatible con YAML insertado. Los requisitos para escapar las comillas en la cadena JSON varían dependiendo de su terminal. Para obtener más información, consulte [Using quotation marks inside strings](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html#cli-usage-parameters-quoting-strings-containing) en la *Guía del usuario de la AWS Command Line Interface*.

   Como alternativa, también puede usar la URL de un archivo como entrada para la opción `--resources-to-import`, tal como se muestra en el siguiente ejemplo.

   ```
   --resources-to-import file://ResourcesToImport.txt
   ```

   Si se ejecuta correctamente, este comando devuelve la siguiente salida de muestra.

   ```
   {
       "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. Revise el conjunto de cambios para asegurarse de que se está importando la pila correcta.

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

1. Para iniciar el conjunto de cambios e importar la pila a la pila principal de origen, utilice el siguiente comando **execute-change-set** y sustituya el texto del marcador de posición. En este momento, se aplican todas las [etiquetas de nivel de pila](cfn-console-create-stack.md#configure-stack-options) a los recursos importados. Una vez completada correctamente la operación de importación `(IMPORT_COMPLETE)`, la pila se anidará correctamente.

   ```
   aws cloudformation execute-change-set --change-set-name ImportChangeSet
   ```
**nota**  
No es necesario ejecutar la detección de desviación en la pila principal después de esta operación de importación porque el recurso `AWS::CloudFormation::Stack` ya está administrado por CloudFormation.