

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