

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