Creación de una pila a partir de recursos existentes - AWS CloudFormation

Creación de una pila a partir de recursos existentes

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.

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.

    • La Atributo DeletionPolicy.

Plantilla de ejemplo

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 AWS Management Console

  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. 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.
  3. 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.

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

  5. En la página Identificar recursos, identifique cada recurso de destino. Para obtener más información, consulte Identificadores de recursos.

    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.

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

    3. Elija Siguiente.

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

  7. 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.
  8. (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.

  9. (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 de los recursos afectados.

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

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

  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.

  2. 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" } } ]
  3. 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 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
  4. 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
  5. 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
  6. (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.

    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" }
    2. 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
    3. 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
  7. (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 de los recursos afectados.

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

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