Resolver desviaciones con una operación de importación - AWS CloudFormation

Resolver desviaciones con una operación de importación

Puede haber casos en los que la configuración de un recurso se haya desviado de la configuración prevista y desee aceptar la nueva configuración como la configuración prevista. En la mayoría de los casos, se resolverían los resultados de desviación actualizando la definición de recursos en la plantilla de pila con una nueva configuración y, a continuación, se realizaría una actualización de pila. Sin embargo, si la nueva configuración actualiza una propiedad de recurso que requiere reemplazo, el recurso se volverá a crear durante la actualización de la pila. Si desea retener el recurso existente, puede utilizar la característica de importación de recursos para actualizarlo y resolver los resultados de desviación sin hacer que se reemplace el recurso.

La resolución de desviaciones de un recurso mediante una operación de importación consta de los siguientes pasos básicos:

Para obtener más información sobre la importación de recursos, consulte Importar recursos de AWS a una pila de CloudFormation con una importación de recursos. Para obtener una lista de los recursos que admiten operaciones de importación, consulte Tipo de recurso compatible.

En este ejemplo, utilizamos la siguiente plantilla, denominada templateToImport.json.

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" } ], "BillingMode": "PROVISIONED", "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "GamesTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "TableName": "Games", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "BillingMode": "PROVISIONED", "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }
Example YAML
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 BillingMode: PROVISIONED ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 GamesTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Games AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH BillingMode: PROVISIONED ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1

En este ejemplo, supongamos que un usuario ha cambiado un recurso fuera de CloudFormation. Después de ejecutar la detección de desviaciones, descubrimos que en GamesTable BillingMode se ha modificado por PAY_PER_REQUEST. Para obtener más información sobre la detección de desviaciones, consulte Detectar cambios de configuración no administrados en pilas y recursos con detección de derivación.

Los resultados de desviaciones muestran los resultados esperados y reales en la consola.

Nuestra pila no está actualizada, nuestros recursos están activos, pero queremos preservar la configuración de recursos prevista. Podemos hacer esto resolviendo la desviación mediante una operación de importación, sin interrumpir los servicios.

Resolver la desviación con una operación de importación mediante la consola de CloudFormation

Paso 1. Actualizar pila con la política de eliminación Retener

Para actualizar la pila mediante un atributo DeletionPolicy con la opción Retain
  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 Stacks (Pilas), elija la pila que se ha desviado.

  3. Elija Update (Actualizar) y, a continuación, elija Replace current template (Reemplazar plantilla actual) del panel de detalles de la pila.

  4. En la página Specify template (Especificar plantilla), proporcione la plantilla actualizada que contiene el atributo DeletionPolicy con la opción Retain mediante uno de los siguientes métodos:

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

    A continuación, elija Siguiente.

  5. Revise la página Specify stack details (Especificar detalles de la pila) y elija Next (Siguiente).

  6. Revise la página Configure stack options (Configurar opciones de la pila) y elija Next (Siguiente).

  7. En la página Review stack-name (Revisar nombre de la pila), elija Update stack (Actualizar pila).

Resultados: en la página Events (Eventos) de la pila, el estado es UPDATE_COMPLETE.

Para resolver la desviación a través de una operación de importación, sin interrumpir los servicios, especifique una DeletionPolicy Retain para los recursos que desea eliminar de la pila. En el siguiente ejemplo, hemos agregado un atributo DeletionPolicy, establecido en Retain, al recurso GamesTable.

Example JSON
"GamesTable": { "Type": "AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties": { "TableName": "Games",
Example YAML
GamesTable: Type: 'AWS::DynamoDB::Table' DeletionPolicy: Retain Properties: TableName: Games

Paso 2. Eliminar recursos desviados, parámetros relacionados y salidas

Para eliminar recursos desviados, parámetros relacionados y salidas
  1. Elija Update (Actualizar) y, a continuación, elija Replace current template (Reemplazar plantilla actual) del panel de detalles de la pila.

  2. En la página Specify template (Especificar plantilla), proporcione la plantilla actualizada con los recursos, parámetros relacionados y resultados eliminados de la plantilla de la pila mediante uno de los métodos siguientes:

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

    A continuación, elija Siguiente.

  3. Revise la página Specify stack details (Especificar detalles de la pila) y elija Next (Siguiente).

  4. Revise la página Configure stack options (Configurar opciones de la pila) y elija Next (Siguiente).

  5. En la página Review stack-name (Revisar nombre de la pila), elija Update stack (Actualizar pila).

Resultados: Logical ID (ID lógico) GamesTable tiene un estado de DELETE_SKIPPED en la página Events (Eventos) de la pila.

Espere hasta que CloudFormation finalice la operación de actualización de la pila. Una vez finalizada la operación de actualización de la pila, elimine el recurso, los parámetros relacionados y los resultados de la plantilla de la pila. A continuación, importe la plantilla actualizada. Después de completar estas acciones, la plantilla de ejemplo 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" } ], "BillingMode": "PROVISIONED", "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } } } }
Example YAML
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 BillingMode: PROVISIONED ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1

Paso 3. Actualizar la plantilla para que coincida con el estado activo de los recursos

Para actualizar la plantilla para que coincida con el estado activo de los recursos
  1. Para importar la plantilla actualizada, elija Stack actions (Acciones de la pila) y, a continuación, elija Import resources into stack (Importar recursos en la pila).

    La opción Importar recursos a la pila en la consola.
  2. Revise la página de Import overview (Información general sobre importación) para obtener una lista de los elementos que debe proporcionar durante esta operación y, a continuación, elija Next (Siguiente).

  3. En la página Specify template (Especificar plantilla), proporcione la plantilla actualizada mediante uno de los métodos siguientes:

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

    A continuación, elija Siguiente.

  4. 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, la propiedad TableName identifica el recurso AWS::DynamoDB::Table.

    2. En Identifier value (Valor del identificador), escriba el valor de la propiedad real. En la plantilla de ejemplo, TableName para el recurso GamesTable es Games.

    3. Elija Siguiente.

  5. Revise la página Specify stack details (Especificar detalles de pila) y elija Next (Siguiente).

  6. En la página Import overview (Información general sobre la importación), revise los recursos importados y, a continuación, elija Import resources (Importar recursos). Esto importará el tipo de recurso AWS::DynamoDB::Table de nuevo a la pila.

Resultados: en este ejemplo, hemos resuelto la desviación de recursos mediante una operación de importación, sin interrumpir los servicios. Puede comprobar el progreso de una acción de importación en la consola de CloudFormation en la pestaña Eventos. Los recursos importados tendrán un estado de IMPORT_COMPLETE seguido de un estado de CREATE_COMPLETE con Resource import complete (Importación de recursos completada) como razón del estado.

Espere hasta que CloudFormation finalice la operación de actualización de la pila. Una vez finalizada la operación de actualización de la pila, la plantilla se actualiza para que coincida con el estado real desviado de los recursos. Por ejemplo, BillingMode se establecerá en PAY_PER_REQUEST y ReadCapacityUnits y WriteCapacityUnits se establecerán en 0.

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" } ], "BillingMode": "PROVISIONED", "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" } ], "BillingMode": "PAY_PER_REQUEST", "ProvisionedThroughput": { "ReadCapacityUnits": 0, "WriteCapacityUnits": 0 } } } } }
Example YAML
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 BillingMode: PROVISIONED 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 BillingMode: PAY_PER_REQUEST ProvisionedThroughput: ReadCapacityUnits: 0 WriteCapacityUnits: 0