

# Cómo importar recursos de AWS a una pila de CloudFormation
<a name="import-resources"></a>

Puede importar recursos existentes a una pila de CloudFormation. Esto es útil si desea comenzar a utilizar CloudFormation para administrar recursos creados fuera de CloudFormation, sin necesidad de eliminarlos ni recrearlos.

CloudFormation ofrece las siguientes opciones para importar recursos existentes a una pila:
+ El [generador de IaC](generate-IaC.md) es una herramienta que escanea automáticamente los recursos existentes y genera una plantilla de CloudFormation en función de su estado actual. Luego, esta plantilla se puede usar para importar esos recursos a una pila.
+ La [importación de recursos](import-resources-manually.md) es un proceso manual en el que se describen los recursos existentes en la plantilla de CloudFormation y, a continuación, se importan a una pila. Este enfoque requiere que especifique manualmente las propiedades y configuraciones de los recursos en la plantilla.
+ La [importación automática](import-resources-automatically.md) es un proceso automático en el que se describen los recursos existentes en la plantilla de CloudFormation, y CloudFormation importa aquellos con nombres personalizados coincidentes a una pila.
+ La [refactorización de pilas](stack-refactoring.md) es una característica que simplifica la reorganización de los recursos de las pilas de CloudFormation y, al mismo tiempo, conserva las propiedades y los datos de los recursos existentes. Con la refactorización de pilas, puede mover recursos entre pilas, dividir pilas monolíticas en componentes más pequeños o consolidar varias pilas en una sola.

Además de poner los recursos existentes bajo la administración de CloudFormation, la característica de importación de recursos puede resultar útil en las siguientes situaciones:
+ **Mover recursos entre pilas**: puede importar recursos de una pila a otra, lo que le permite reorganizar la infraestructura según sea necesario.
+ **Anidar las pilas existentes**: puede importar una pila existente como una pila anidada dentro de otra pila, lo que permite diseños de infraestructura modulares y reutilizables.

CloudFormation es compatible con la importación de una amplia gama de recursos. Para obtener más información, consulte [Tipo de recurso compatible](resource-import-supported-resources.md).

**Topics**
+ [Cómo importar recursos de AWS de forma manual](import-resources-manually.md)
+ [Cómo importar recursos de AWS automáticamente](import-resources-automatically.md)
+ [Reversión de una operación de importación](resource-import-revert.md)

# Cómo importar recursos de AWS a una pila de CloudFormation de forma manual
<a name="import-resources-manually"></a>

Con la importación de recursos, puede importar recursos existentes de AWS a una pila nueva o existente de CloudFormation. Durante una operación de importación, se crea un conjunto de cambios que importa los recursos existentes en una pila o se crea una nueva pila a partir de los recursos existentes. Proporcione lo siguiente durante la importación.
+ Una plantilla que describa toda la pila, incluidos los recursos de pila originales y los recursos que esté importando. Cada recurso que se va a importar debe tener un [atributo de DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html).
+ Identificadores de los recursos que está importando que CloudFormation puede usar para asignar los ID lógicos en la plantilla con los recursos existentes.

**nota**  
CloudFormation solo admite un nivel de anidamiento mediante la importación de recursos. Esto significa que no puede importar una pila a una pila secundaria ni importar una pila que tenga secundarias.

**Topics**
+ [Identificadores de recursos](#resource-import-identifiers-unique-ids)
+ [Validación](#resource-import-validation)
+ [Códigos de estado](#resource-import-status-codes)
+ [Consideraciones](#resource-import-considerations)
+ [Recursos adicionales](#resource-import-additional-resources)
+ [Creación de una pila a partir de recursos existentes](resource-import-new-stack.md)
+ [Importación de recursos existentes en una pila](resource-import-existing-stack.md)
+ [Mover recursos entre pilas](refactor-stacks.md)
+ [Anidamiento de una pila existente](resource-import-nested-stacks.md)

## Identificadores de recursos
<a name="resource-import-identifiers-unique-ids"></a>

Proporcione dos valores para identificar cada recurso que esté importando.
+ Una propiedad de identificador. Se trata de una propiedad de recurso que se puede utilizar para identificar cada tipo de recurso. Por ejemplo, un recurso `AWS::S3::Bucket` se puede identificar utilizando su `BucketName`.

  La propiedad de recurso que utiliza para identificar el recurso que va a importar varía según el tipo de recurso. Puede encontrar la propiedad de recurso en la consola de CloudFormation. Tras crear una plantilla que incluya el recurso que se va a importar, puede iniciar el proceso de importación, donde encontrará las propiedades de identificadores de los recursos que va a importar. Para algunos tipos de recursos, puede haber varias formas de identificarlos y puede seleccionar qué propiedad usar en las listas desplegables.

  Como alternativa, para obtener las propiedades de identificadores de los recursos que está importando, llame al comando de la CLI [get-template-summary](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/get-template-summary.html) y especifique la URL de S3 de la plantilla de pila como valor de la opción `--template-url`.
+ Un valor de identificador. Este es el valor real de la propiedad del recurso. Por ejemplo, el valor real de la propiedad `BucketName` podría ser `MyS3Bucket`.

  Puede obtener el valor de la propiedad del identificador en la consola de servicio del recurso.

## Validación de la importación de recursos
<a name="resource-import-validation"></a>

Durante una operación de importación, CloudFormation lleva a cabo las siguientes validaciones.
+ El recurso que se va a importar existe.
+ Las propiedades y los valores de configuración de cada recurso que se va a importar se adhieren al esquema de tipo de recurso, que define las propiedades aceptadas, las propiedades requeridas y los valores de propiedad admitidos.
+ Las propiedades requeridas se especifican en la plantilla. Las propiedades requeridas para cada tipo de recurso se describen en la [Referencia de tipos de recursos y propiedades de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html).
+ El recurso que se va a importar no pertenece a otra pila de la misma región.

CloudFormation no comprueba si la configuración de la plantilla coincide con la configuración real de las propiedades del recurso.

**importante**  
Compruebe que los recursos y las propiedades que se definieron en la plantilla coincidan con la configuración prevista de la importación de recursos para evitar cambios inesperados.

## Códigos de estado de la importación de recursos
<a name="resource-import-status-codes"></a>

En esta tabla se describen los distintos tipos de estado utilizados con la característica de importación de recursos.


| Estado de la operación de importación | Descripción | 
| --- | --- | 
|  `IMPORT_IN_PROGRESS`  |  La operación de importación está en curso.  | 
|  `IMPORT_COMPLETE`  |  La operación de importación se ha completado correctamente para todos los recursos de la pila.  | 
|  `IMPORT_ROLLBACK_IN_PROGRESS`  |  La operación de restauración de importación ha restablecido la configuración de plantilla anterior.  | 
|  `IMPORT_ROLLBACK_FAILED`  |  Se produjo un error en la operación de restauración de importación.  | 
|  `IMPORT_ROLLBACK_COMPLETE`  |  La importación restableció la configuración de la plantilla anterior.  | 

## Consideraciones durante una operación de importación
<a name="resource-import-considerations"></a>
+ Una vez finalizada la importación y antes de realizar operaciones de pila posteriores, se recomienda ejecutar la detección de desviaciones en los recursos importados. La detección de desviaciones garantiza que la configuración de la plantilla coincida con la configuración real. Para obtener más información, consulte [Detección de desviaciones en una pila de CloudFormation completa](detect-drift-stack.md).
+ Las operaciones de importación no permiten nuevas creaciones de recursos, eliminaciones de recursos ni cambios en las configuraciones de propiedades.
+ Cada recurso que se vaya a importar debe tener un atributo `DeletionPolicy` para que la operación de importación se realice correctamente. La `DeletionPolicy` se puede establecer en cualquier valor posible. Solo los recursos que está importando necesitan un parámetro `DeletionPolicy`. Los recursos que ya forman parte de la pila no necesitan una `DeletionPolicy`.
+ No puede importar el mismo recurso en varias pilas.
+ Puede utilizar la condición de política de IAM `cloudformation:ImportResourceTypes` para controlar con qué tipos de recursos pueden trabajar los usuarios durante una operación de importación. Para obtener más información, consulte [Claves de condición de políticas para CloudFormation](control-access-with-iam.md#using-iam-conditions).
+ Al importar recursos se aplican los límites de pila de CloudFormation. Para obtener más información acerca los límites, consulte [Comprensión de las cuotas de CloudFormation](cloudformation-limits.md).

## Recursos adicionales de
<a name="resource-import-additional-resources"></a>

Para solucionar el problema de la desviación de pilas mediante la importación de recursos, consulte [Resolver desviaciones con una operación de importación](resource-import-resolve-drift.md).

# Creación de una pila a partir de recursos existentes
<a name="resource-import-new-stack"></a>

En este tema se muestra cómo crear una pila a partir de los recursos de AWS existentes al describirlos en una plantilla. Para buscar en su lugar los recursos existentes y generar automáticamente una plantilla que se pueda utilizar para importar los recursos existentes a CloudFormation o replicar los recursos en una cuenta nueva, consulte [Generar plantillas de los recursos existentes con el generador IaC](generate-IaC.md).

**Requisitos previos**

Antes de comenzar, debe disponer de lo siguiente:
+ Una plantilla que describe todos los recursos que desea incluir en la pila nueva. Guarde la plantilla de manera local o en un bucket de Amazon S3. 
+ Para cada recurso que se desee importar, incluya lo siguiente:
  + Las propiedades y los valores de las propiedades que definen la configuración actual del recurso.
  + El identificador único por cada recurso; por ejemplo, por cada nombre. Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).
  + El [atributo DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html).

**Topics**
+ [Plantilla de ejemplo](#resource-import-new-stack-example-template)
+ [Crear una pila a partir de recursos existentes mediante la Consola de administración de AWS](#resource-import-new-stack-console)
+ [Crear una pila a partir de recursos existentes mediante la AWS CLI](#resource-import-new-stack-cli)

## Plantilla de ejemplo
<a name="resource-import-new-stack-example-template"></a>

En este tutorial, se supone que utiliza la siguiente plantilla de ejemplo, llamada `TemplateToImport.json`, la cual especifica dos tablas de DynamoDB que se crearon por fuera de CloudFormation. `ServiceTable` y `GamesTable` son los destinos de la importación. 

**nota**  
Esta plantilla es solo un ejemplo. Para utilizarla en las pruebas propias, sustituya los recursos de ejemplo con los recursos de su cuenta. 

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
        "ServiceTable": {
            "Type": "AWS::DynamoDB::Table",
            "DeletionPolicy": "Retain",
            "Properties": {
                "TableName": "Service",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 1
                }
            }
        },
        "GamesTable": {
            "Type": "AWS::DynamoDB::Table",
            "DeletionPolicy": "Retain",
            "Properties": {
                "TableName": "Games",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 1
                }
            }
        }
    }
}
```

## Crear una pila a partir de recursos existentes mediante la Consola de administración de AWS
<a name="resource-import-new-stack-console"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. En la página **Pilas** elija **Crear pila**, y, a continuación, elija **Con recursos existentes (importar recursos)**.  
![\[La opción Crear pila a partir de recursos existentes en la consola.\]](http://docs.aws.amazon.com/es_es/AWSCloudFormation/latest/UserGuide/images/create-stack-with-existing-resources.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 **Especificar plantilla** proporcione la plantilla mediante uno de los métodos siguientes y, a continuación, elija **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 **Identificar recursos**, identifique cada recurso de destino. Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

   1. En **Propiedad del identificador**, elija el tipo de identificador de recurso. Por ejemplo, el recurso `AWS::DynamoDB::Table` se puede identificar mediante la propiedad `TableName`.

   1. En **Valor del identificador**, escriba el valor de la propiedad real. Por ejemplo, el `TableName` para el recurso `GamesTable` en el ejemplo de plantilla es `Games`. 

   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 *nombre de pila*** confirme que se están importando los recursos correctos y, a continuación, elija **Importar recursos**. Esto ejecuta automáticamente el conjunto de cambios creado en el último paso.

   Aparece el panel **Eventos** de la página **Detalles de la pila** para la nueva pila.  
![\[La pestaña Eventos de la consola.\]](http://docs.aws.amazon.com/es_es/AWSCloudFormation/latest/UserGuide/images/import-events.png)

1. (Opcional) Ejecute la detección de desviaciones en la pila para asegurarse de que la plantilla y la configuración real de los recursos importados coinciden. Para obtener más información sobre la detección de desviaciones, consulte [Detección de desviaciones en una pila de CloudFormation completa](detect-drift-stack.md).

1. (Opcional) Si los recursos importados no coinciden con las configuraciones de plantilla esperadas, corrija las configuraciones de plantilla o actualice los recursos directamente. En este tutorial, corregimos las configuraciones de plantilla para que coincidan con sus configuraciones reales.

   1. [Revierta la operación de importación](resource-import-revert.md#resource-import-revert-console) de los recursos afectados.

   1. Agregue de nuevo los destinos de importación a la plantilla, asegurándose de que las configuraciones de plantilla coincidan con las configuraciones reales.

   1. Repita los pasos del 2 al 8 con la plantilla modificada para importar de nuevo los recursos.

## Crear una pila a partir de recursos existentes mediante la AWS CLI
<a name="resource-import-new-stack-cli"></a>

1. Para saber qué propiedades identifican cada tipo de recurso en la plantilla, ejecute el comando **get-template-summary** y especifique la URL de S3 de la plantilla. Por ejemplo, el recurso `AWS::DynamoDB::Table` se puede identificar mediante la propiedad `TableName`. Para el recurso `GamesTable` del ejemplo de plantilla, el valor de `TableName` es `Games`. Necesitará esta información en el siguiente paso.

   ```
   aws cloudformation get-template-summary \
       --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
   ```

   Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

1. Redacte una lista de los recursos reales de su plantilla y sus identificadores únicos en el siguiente formato de cadena JSON.

   ```
   [{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}},{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"ServiceTable","ResourceIdentifier":{"TableName":"Service"}}]
   ```

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

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

   ```
   [
      {
         "ResourceType":"AWS::DynamoDB::Table",
         "LogicalResourceId":"GamesTable",
         "ResourceIdentifier":{
            "TableName":"Games"
         }
      },
      {
         "ResourceType":"AWS::DynamoDB::Table",
         "LogicalResourceId":"ServiceTable",
         "ResourceIdentifier":{
            "TableName":"Service"
         }
      }
   ]
   ```

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 TargetStack --change-set-name ImportChangeSet \
       --change-set-type IMPORT \
       --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json \
       --resources-to-import '[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}},{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"ServiceTable","ResourceIdentifier":{"TableName":"Service"}}]'
   ```
**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
   ```

1. Revise el conjunto de cambios para asegurarse de que se importarán los recursos correctos.

   ```
   aws cloudformation describe-change-set \
       --change-set-name ImportChangeSet --stack-name TargetStack
   ```

1. Para iniciar el conjunto de cambios e importar los recursos, utilice el siguiente comando **execute-change-set** y sustituya el texto del marcador de posición. Una vez finalizada correctamente la operación `(IMPORT_COMPLETE)`, los recursos se importan correctamente.

   ```
   aws cloudformation execute-change-set \
       --change-set-name ImportChangeSet --stack-name TargetStack
   ```

1. (Opcional) Ejecute la detección de desviaciones en la pila `IMPORT_COMPLETE` para asegurarse de que la plantilla y la configuración real de los recursos importados coinciden. Para obtener más información acerca de la detección de desviaciones, consulte [Detección de desviaciones en recursos de la pila individuales](detect-drift-resource.md).

   1. Ejecute la detección de desviaciones en la pila especificada.

      ```
      aws cloudformation detect-stack-drift --stack-name TargetStack
      ```

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

      ```
      { "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
      ```

   1. Vea el progreso de una operación de detección de desviaciones para el ID de detección de desviaciones de pila especificado.

      ```
      aws cloudformation describe-stack-drift-detection-status \
          --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample
      ```

   1. Vea la información de desviaciones de los recursos en los que se han comprobado las desviaciones de la pila especificada.

      ```
      aws cloudformation describe-stack-resource-drifts --stack-name TargetStack
      ```

1. (Opcional) Si los recursos importados no coinciden con las configuraciones de plantilla esperadas, corrija las configuraciones de plantilla o actualice los recursos directamente. En este tutorial, corregimos las configuraciones de plantilla para que coincidan con sus configuraciones reales.

   1. [Revierta la operación de importación](resource-import-revert.md#resource-import-revert-cli) de los recursos afectados.

   1. Agregue de nuevo los destinos de importación a la plantilla, asegurándose de que las configuraciones de plantilla coincidan con las configuraciones reales.

   1. Repita los pasos del 3 al 6 con la plantilla modificada para importar de nuevo los recursos.

# Importación de recursos existentes en una pila
<a name="resource-import-existing-stack"></a>

En este tema se muestra cómo importar los recursos de AWS existentes a una pila existente al describirlos en una plantilla. Para buscar en su lugar los recursos existentes y generar automáticamente una plantilla que se pueda utilizar para importar los recursos existentes a CloudFormation o replicar los recursos en una cuenta nueva, consulte [Generar plantillas de los recursos existentes con el generador IaC](generate-IaC.md).

**Requisitos previos**

Antes de comenzar, debe disponer de lo siguiente:
+ Una plantilla que describa toda la pila, incluidos los recursos que ya forman parte de la pila y los recursos que se van a importar. Guarde la plantilla de manera local o en un bucket de Amazon S3. 

  **Obtención de una copia de la plantilla de una pila en ejecución**

  1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/).

  1. En la lista de pilas, seleccione la pila de la que desea recuperar la plantilla.

  1. En el panel de detalles de la pila, seleccione la pestaña **Plantilla** y, a continuación, seleccione **Copiar en el portapapeles**.

  1. Pegue el código en un editor de texto para empezar a agregar otros recursos a la plantilla.
+ Para cada recurso que se desee importar, incluya lo siguiente:
  + Las propiedades y los valores de las propiedades que definen la configuración actual del recurso.
  + El identificador único por cada recurso; por ejemplo, por cada nombre. Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).
  + El [atributo DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html).

**Topics**
+ [Plantilla de ejemplo](#resource-import-existing-stack-example-template)
+ [Importar un recurso existente a una pila mediante la Consola de administración de AWS](#resource-import-existing-stack-console)
+ [Importar un recurso existente a una pila mediante la AWS CLI](#resource-import-existing-stack-cli)

## Plantilla de ejemplo
<a name="resource-import-existing-stack-example-template"></a>

En este tutorial, se supone que utiliza la siguiente plantilla de ejemplo, llamada `TemplateToImport.json`, la cual especifica dos tablas de DynamoDB. `ServiceTable` actualmente forma parte de la pila y `GamesTable` es la tabla que desea importar.

**nota**  
Esta plantilla es solo un ejemplo. Para utilizarla en las pruebas propias, sustituya los recursos de ejemplo con los recursos de su cuenta. 

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
        "ServiceTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "TableName": "Service",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 1
                }
            }
        },
        "GamesTable": {
            "Type": "AWS::DynamoDB::Table",
            "DeletionPolicy": "Retain",
            "Properties": {
                "TableName": "Games",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 1
                }
            }
        }
    }
}
```

## Importar un recurso existente a una pila mediante la Consola de administración de AWS
<a name="resource-import-existing-stack-console"></a>

**nota**  
La consola de CloudFormation no admite el uso de la función intrínseca `Fn::Transform` al importar recursos. Puede usar la AWS CLI para importar recursos que usen la función intrínseca `Fn::Transform`.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. En la página **Pilas**, elija la pila a la que desea importar recursos.

1. Elija **Acciones de pila**, y, a continuación, elija **Importar recursos en la 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. Revise la página **Información general de importación** y, a continuación, elija **Siguiente**.

1. En la página **Especificar plantilla** proporcione la plantilla actualizada utilizando uno de los métodos siguientes y, a continuación, elija **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 **Identificar recursos**, identifique cada recurso de destino. Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

   1. En **Propiedad del identificador**, elija el tipo de identificador de recurso. Por ejemplo, el recurso `AWS::DynamoDB::Table` se puede identificar mediante la propiedad `TableName`.

   1. En **Valor del identificador**, escriba el valor de la propiedad real. Por ejemplo, el `TableName` para el recurso `GamesTable` en el ejemplo de plantilla es `Games`.

   1. Elija **Siguiente**.

1. En la página **Especificar detalles de pila** actualice los parámetros y, a continuación, elija **Siguiente**. Esto crea automáticamente un conjunto de cambios.
**nota**  
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 *nombre de pila*** revise los recursos que desea importar 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. Para obtener más información, consulte [Configurar las opciones la pila](cfn-console-create-stack.md#configure-stack-options).

   Aparece la página **Eventos** de la pila.  
![\[La pestaña Eventos de la consola.\]](http://docs.aws.amazon.com/es_es/AWSCloudFormation/latest/UserGuide/images/import-events.png)

1. (Opcional) Ejecute la detección de desviaciones en la pila para asegurarse de que la plantilla y la configuración real de los recursos importados coinciden. Para obtener más información sobre la detección de desviaciones, consulte [Detección de desviaciones en una pila de CloudFormation completa](detect-drift-stack.md).

1. (Opcional) Si los recursos importados no coinciden con las configuraciones de plantilla esperadas, corrija las configuraciones de plantilla o actualice los recursos directamente. Para obtener más información acerca de la importación de recursos desviados, consulte [Resolver desviaciones con una operación de importación](resource-import-resolve-drift.md).

## Importar un recurso existente a una pila mediante la AWS CLI
<a name="resource-import-existing-stack-cli"></a>

1. Para saber qué propiedades identifican cada tipo de recurso en la plantilla, ejecute el comando **get-template-summary** y especifique la URL de S3 de la plantilla. Por ejemplo, el recurso `AWS::DynamoDB::Table` se puede identificar mediante la propiedad `TableName`. Para el recurso `GamesTable` del ejemplo de plantilla, el valor de `TableName` es `Games`. Necesitará esta información en el siguiente paso.

   ```
   aws cloudformation get-template-summary \
       --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
   ```

   Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

1. Redacte una lista de recursos reales para importar y sus identificadores únicos en el siguiente formato de cadena JSON.

   ```
   [{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
   ```

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

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

   ```
   [
     {
         "ResourceType":"AWS::DynamoDB::Table",
         "LogicalResourceId":"GamesTable",
         "ResourceIdentifier": {
           "TableName":"Games"
         }
     }
   ]
   ```

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 TargetStack --change-set-name ImportChangeSet \
       --change-set-type IMPORT \
       --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json \
       --resources-to-import '[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'
   ```
**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
   ```

1. Revise el conjunto de cambios para asegurarse de que se importarán los recursos correctos.

   ```
   aws cloudformation describe-change-set \
       --change-set-name ImportChangeSet --stack-name TargetStack
   ```

1. Para iniciar el conjunto de cambios e importar los recursos, 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 a los recursos importados. Para obtener más información, consulte [Configurar las opciones la pila](cfn-console-create-stack.md#configure-stack-options). Una vez finalizada correctamente la operación `(IMPORT_COMPLETE)`, los recursos se importan correctamente.

   ```
   aws cloudformation execute-change-set \
       --change-set-name ImportChangeSet --stack-name TargetStack
   ```

1. (Opcional) Ejecute la detección de desviaciones en la pila `IMPORT_COMPLETE` para asegurarse de que la plantilla y la configuración real de los recursos importados coinciden. Para obtener más información sobre la detección de desviaciones, consulte [Detección de desviaciones en una pila de CloudFormation completa](detect-drift-stack.md).

   1. Ejecute la detección de desviaciones en la pila especificada.

      ```
      aws cloudformation detect-stack-drift --stack-name TargetStack
      ```

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

      ```
      { "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
      ```

   1. Vea el progreso de una operación de detección de desviaciones para el ID de detección de desviaciones de pila especificado.

      ```
      aws cloudformation describe-stack-drift-detection-status \
          --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample
      ```

   1. Vea la información de desviaciones de los recursos en los que se han comprobado las desviaciones de la pila especificada.

      ```
      aws cloudformation describe-stack-resource-drifts --stack-name TargetStack
      ```

1. (Opcional) Si los recursos importados no coinciden con las configuraciones de plantilla esperadas, corrija las configuraciones de plantilla o actualice los recursos directamente. Para obtener más información acerca de la importación de recursos desviados, consulte [Resolver desviaciones con una operación de importación](resource-import-resolve-drift.md).

# Mover recursos entre pilas
<a name="refactor-stacks"></a>

Con la característica `resource import`, puede mover recursos entre pilas o *refactorizar* pilas. En primer lugar, debe agregar una política de eliminación `Retain` al recurso que desea mover para asegurarse de que el recurso se conserva al eliminarlo de la pila de origen e importarlo a la pila de destino.

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](import-resources.md).

**importante**  
No todos los recursos admiten operaciones de importación. Consulte [Recursos que admiten operaciones de importación](resource-import-supported-resources.md) antes de eliminar un recurso de la pila. Si elimina un recurso que no admite operaciones de importación de su pila, no puede importar el recurso a otra pila ni devolverlo a la pila de origen.

## Refactorización de una pila mediante la Consola de administración de AWS
<a name="refactor-stacks-console"></a>

1. En la plantilla de origen, especifique una `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) para el recurso que desea mover.

   En la siguiente plantilla de origen de ejemplo, `Games` es el destino de esta refactorización.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Abra la consola de CloudFormation para realizar una actualización de la pila y aplicar la política de eliminación.

   1. En la página **Stacks (Pilas)** con la pila seleccionada, elija **Update (Actualizar)**.

   1. En **Preparar plantilla**, elija **Reemplazar la plantilla actual**.

   1. En **Specify template (Especificar plantilla)**, proporcione la plantilla de origen actualizada con el atributo `DeletionPolicy` en `GamesTable` y, a continuación, elija **Next (Siguiente)**.
      + Elija **Amazon S3 URL (URL de Amazon S3)** y, a continuación, especifique la URL de la plantilla de origen actualizada en el cuadro de texto.
      + Elija **Upload a template file (Cargar un archivo de plantilla)** y, a continuación, busque el archivo de la plantilla de origen actualizada.

   1. En la página **Specify stack details (Especificar detalles de pila)** no se requieren cambios. Elija **Next** (Siguiente).

   1. La página **Configure stack options (Configurar opciones de pila)**, no precisa cambios. Elija **Siguiente**.

   1. En la página **Revisar *SourceStackName***, revise los cambios. Si la plantilla contiene recursos de IAM, seleccione **I acknowledge that this template may create IAM resources (Confirmo que esta plantilla pueda crear recursos de IAM)** para especificar que desea utilizar recursos de IAM en la plantilla. Para obtener más información sobre recursos de IAM en plantillas, consulte [Control del acceso a CloudFormation con AWS Identity and Access Management](control-access-with-iam.md). A continuación, actualice la pila de origen mediante la creación de un conjunto de cambios o actualice la pila de origen directamente.

1. Elimine el recurso, los parámetros relacionados y las salidas de la plantilla de origen y, a continuación, agréguelos a la plantilla de destino.

   La plantilla de origen ahora tiene el siguiente aspecto.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           }
       }
   }
   ```

   La siguiente plantilla de destino de ejemplo tiene actualmente el recurso `PlayersTable` y ahora también contiene `GamesTable`.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "PlayersTable": {
               "Type": "AWS::DynamoDB::Table",
               "Properties": {
                   "TableName": "Players",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Repita los pasos 2 y 3 para actualizar la pila de origen de nuevo, esta vez con el fin de eliminar el recurso de destino de la pila.

1. Realice una operación de importación para agregar `GamesTable` a la pila de destino.

   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) haga una de las siguientes acciones y, a continuación, elija **Next** (Siguiente).
      + Elija **Amazon S3 URL (URL de Amazon S3)** y, a continuación, especifique la URL en el cuadro de texto.
      + Elija **Upload a template file (Cargar un archivo de plantilla)** y, a continuación, busque el archivo que se va a cargar.

   1. En la página **Identify resources (Identificar recursos)**, identifique el recurso que va a mover (en este ejemplo, `GamesTable`). Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

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

      1. En **Valor del identificador**, escriba el valor de la propiedad real. Por ejemplo, `GamesTables`. 

      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 *TargetStackName***, confirme que se está importando el recurso correcto y, a continuación, elija **Importar recursos**. Esto inicia automáticamente el conjunto de cambios creado en el último paso. En este momento, se aplican todas las [etiquetas de nivel de pila](cfn-console-create-stack.md#configure-stack-options) 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 está administrado por CloudFormation.

## Refactorización de una pila mediante la AWS CLI
<a name="refactor-stacks-cli"></a>

1. En la plantilla de origen, especifique una `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) para el recurso que desea mover.

   En la siguiente plantilla de origen de ejemplo, `GamesTable` es el destino de esta refactorización.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Actualice la pila de origen para aplicar la política de eliminación al recurso.

   ```
   aws cloudformation update-stack --stack-name SourceStackName
   ```

1. Elimine el recurso, los parámetros relacionados y las salidas de la plantilla de origen y, a continuación, agréguelos a la plantilla de destino.

   La plantilla de origen ahora tiene el siguiente aspecto.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           }
       }
   }
   ```

   La siguiente plantilla de destino de ejemplo tiene actualmente el recurso `PlayersTable` y ahora también contiene `GamesTable`.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "PlayersTable": {
               "Type": "AWS::DynamoDB::Table",
               "Properties": {
                   "TableName": "Players",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Actualice la pila de origen para eliminar el recurso (`GamesTable`) y sus parámetros y salidas relacionados de la pila.

   ```
   aws cloudformation update-stack --stack-name SourceStackName
   ```

1. Redacte una lista de recursos reales para importar y sus identificadores únicos en el siguiente formato de cadena JSON. Para obtener más información, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

   ```
   [{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
   ```

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

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

   ```
   [
     {
         "ResourceType":"AWS::DynamoDB::Table",
         "LogicalResourceId":"GamesTable",
         "ResourceIdentifier": {
           "TableName":"Games"
         }
     }
   ]
   ```

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 TargetStackName --change-set-name ImportChangeSet \
       --change-set-type IMPORT \
       --template-body file://TemplateToImport.json \
       --resources-to-import "'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'"
   ```
**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
   ```

1. Revise el conjunto de cambios para asegurarse de que se está importando el recurso correcto a la pila de destino.

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

1. Para iniciar el conjunto de cambios e importar el recurso, 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 a los recursos importados. Una vez finalizada debidamente la operación `(IMPORT_COMPLETE)`, el recurso se importa correctamente.

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

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

# Cómo importar recursos de AWS a una pila de CloudFormation automáticamente
<a name="import-resources-automatically"></a>

Ahora puede importar automáticamente *recursos con nombre* al crear o actualizar pilas de CloudFormation. Un *recurso con nombre* es aquel al que se le ha asignado un nombre personalizado. Para obtener más información, consulte [Tipo de nombre](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html) en la *Referencia de plantillas de CloudFormation*.

Cuando inicia una importación automática, CloudFormation verifica si existen recursos que coincidan con su plantilla y los importa durante la implementación. Para pilas anidadas, cree el conjunto de cambios desde la pila raíz.

Una vez finalizada la importación y antes de realizar operaciones de pila posteriores, se recomienda ejecutar la detección de desviaciones en los recursos importados. La detección de desviaciones garantiza que la configuración de la plantilla coincida con la configuración real. Para obtener más información, consulte [Detección de desviaciones en una pila de CloudFormation completa](detect-drift-stack.md).

Para importar un recurso, este debe cumplir con los siguientes requisitos:
+ El recurso debe tener un nombre personalizado estático definido en la plantilla. Los nombres dinámicos (que usan \$1Ref u otras funciones) no son compatibles por el momento.
+ El recurso debe tener una `DeletionPolicy` de `Retain` o `RetainExceptOnCreate`.
+ El recurso no debe pertenecer a otra pila de CloudFormation.
+ El tipo de recurso debe admitir operaciones de importación de CloudFormation. Para obtener más información, consulte [Tipo de recurso compatible](resource-import-supported-resources.md).
+ El identificador principal del tipo de recurso debe estar en la plantilla. No se admiten los identificadores principales con propiedades de solo lectura. Para saber cuál es el identificador principal de un tipo, busque la propiedad `primaryIdentifier` en el esquema de recursos. Para obtener más información sobre la propiedad, consulte [primaryIdentifier](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-schema.html#schema-properties-primaryidentifier).

**Example Ejemplo de importación automática**  
El siguiente ejemplo usa un conjunto de cambios, `CreateChangeSet`, para crear una pila llamada `my-stack` basada en un archivo de plantilla, `template.yaml`, e importa automáticamente los recursos que coincidan.  

```
aws cloudformation create-change-set \
  --stack-name my-stack \
  --change-set-name CreateChangeSet \
  --change-set-type CREATE \
  --template-body file://template.yaml \
  --import-existing-resources
```

## Solución de problemas
<a name="auto-import-troubleshooting"></a>

Cuando se produce un error nen la importación automática, puede tomar las siguientes medidas:
+ Verifique que el nombre del recurso en la plantilla coincida exactamente con el nombre del recurso
+ Verifique que el recurso no sea administrado por otra pila
+ Asegúrese de que el tipo de recurso admita operaciones de importación
+ Verifique que la plantilla incluya todas las propiedades requeridas para el tipo de recurso

# Reversión de una operación de importación
<a name="resource-import-revert"></a>

Para revertir una operación de importación, especifique una política de eliminación `Retain` para el recurso que desea eliminar de la plantilla a fin de asegurarse de que se conserva al eliminarlo de la pila.

## Revertir una operación de importación mediante la Consola de administración de AWS
<a name="resource-import-revert-console"></a>

1. Especifique una `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) para los recursos que desea eliminar de la pila. En la plantilla de ejemplo siguiente, `GamesTable` es el destino de esta operación de reversión.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Abra la consola de CloudFormation para realizar una actualización de la pila y aplicar la política de eliminación.

   1. En la página **Stacks (Pilas)**, con la pila seleccionada, elija **Update (Actualizar)** y, a continuación, elija **Update stack (standard) (Actualizar pila [estándar])**.

   1. En **Preparar plantilla**, elija **Reemplazar la plantilla actual**.

   1. En **Specify template (Especificar plantilla)**, proporcione la plantilla de origen actualizada con el atributo `DeletionPolicy` en `GamesTable` y, a continuación, elija **Next (Siguiente)**.
      + Elija **Amazon S3 URL (URL de Amazon S3)** y, a continuación, especifique la URL de la plantilla de origen actualizada en el cuadro de texto.
      + Elija **Upload a template file (Cargar un archivo de plantilla)** y, a continuación, busque el archivo de la plantilla de origen actualizada.

   1. En la página **Specify stack details (Especificar detalles de pila)** no se requieren cambios. Elija **Next** (Siguiente).

   1. La página **Configure stack options (Configurar opciones de pila)**, no precisa cambios. Elija **Siguiente**.

   1. En la página **Revisar *MyStack***, revise los cambios. Si la plantilla contiene recursos de IAM, seleccione **I acknowledge that this template may create IAM resources (Confirmo que esta plantilla pueda crear recursos de IAM)** para especificar que desea utilizar recursos de IAM en la plantilla. Para obtener más información, consulte [Reconocimiento de recursos de IAM en plantillas de CloudFormation](control-access-with-iam.md#using-iam-capabilities). A continuación, actualice la pila de origen mediante la creación de un conjunto de cambios o actualice la pila de origen directamente.

1. Elimine el recurso, los parámetros relacionados y las salidas de la plantilla de la pila. En este ejemplo, la plantilla ahora tiene el siguiente aspecto.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           }
       }
   }
   ```

1. Repita el paso 2 para eliminar el recurso (`GamesTable`) y sus parámetros y salidas relacionados de la pila.

## Revertir una operación de importación mediante la AWS CLI
<a name="resource-import-revert-cli"></a>

1. Especifique una `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) para los recursos que desea eliminar de la pila. En la plantilla de ejemplo siguiente, `GamesTable` es el destino de esta operación de reversión.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Actualice la pila para aplicar la política de eliminación al recurso.

   ```
   aws cloudformation update-stack --stack-name MyStack
   ```

1. Elimine el recurso, los parámetros relacionados y las salidas de la plantilla de la pila. En este ejemplo, la plantilla ahora tiene el siguiente aspecto.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           }
       }
   }
   ```

1. Actualice la pila para eliminar el recurso (`GamesTable`) y sus parámetros y salidas relacionados de la pila.

   ```
   aws cloudformation update-stack --stack-name MyStack
   ```