Detección de desviaciones en CloudFormation StackSets - AWS CloudFormation

Detección de desviaciones en CloudFormation StackSets

Incluso aunque administre las pilas y los recursos que estas contienen a través de CloudFormation, los usuarios pueden cambiar esos recursos fuera de CloudFormation. Los usuarios pueden editar los recursos directamente usando el servicio subyacente que ha creado el recurso. Al llevar a cabo la detección de desviaciones en un StackSet, puede determinar si alguna de las instancias de pila pertenecientes a ese StackSet difiere, o se ha desviado, de su configuración esperada.

Cómo lleva a cabo CloudFormation la detección de desviaciones en un StackSet

Cuando CloudFormation lleva a cabo la detección de desviaciones en un StackSet, la lleva a cabo en la pila asociada a cada instancia de pila del StackSet. Para ello, CloudFormation compara el estado actual de cada recurso de la pila con el estado esperado de dicho recurso, tal como se define en la plantilla de la pila y en los parámetros de entrada especificados. Si el estado actual de un recurso varía con respecto a su estado esperado, se considera que ese recurso se ha desviado. Si uno o más recursos en una pila se han desviado, entonces se considera que la pila en sí misma se ha desviado, y se considera que las instancias de pila con las que está asociada la pila también se han desviado. Si una o más instancias de pila de un StackSet se han desviado, se considera que el StackSet se ha desviado.

La detección de desviaciones identifica los cambios no administrados; es decir, los cambios realizados en las pilas fuera de CloudFormation. Los cambios efectuados directamente en una pila a través de CloudFormation, en lugar de en el nivel del StackSet, no se consideran una desviación. Por ejemplo, supongamos que tiene una pila asociada a una instancia de pila de un StackSet. Si usa CloudFormation para actualizar esa pila para usar una plantilla diferente, eso no se considera desviación, aunque esa pila ahora tiene una plantilla diferente a cualquier otra pila perteneciente al StackSet. Esto se debe a que la pila todavía coincide con la plantilla y la configuración de parámetros esperados en CloudFormation.

Para obtener información detallada sobre cómo CloudFormation realiza la detección de desviaciones en una pila, consulte Detectar cambios de configuración no administrados en pilas y recursos con detección de derivación.

Dado que CloudFormation realiza la detección de desviaciones en cada pila individualmente, tiene en cuenta cualquier valor de parámetro anulado al determinar si una pila se ha desviado. Para obtener más información sobre la anulación de parámetros de plantilla en instancias de pila, consulte Anulación de los valores de los parámetros en pilas en el StackSet de CloudFormation.

Si realiza la detección de desviaciones directamente en una pila asociada a una instancia de pila, esos resultados de desviaciones no estarán disponibles en la página de consola de StackSets.

Detección de la desviación en un StackSet (consola)

Detección de la desviación en un StackSet
  1. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. En la página StackSets, seleccione el StackSet en el que desea llevar a cabo la detección de desviaciones.

  3. En el menú Actions (Acciones) seleccione Detect drifts (Detectar desviaciones).

    CloudFormation muestra una barra de información que indica que se ha iniciado la detección de desviaciones en el StackSet seleccionado.

  4. Opcional: para monitorear el progreso de la operación de detección de desviaciones:

    1. Seleccione el nombre del StackSet para mostrar la página Detalles de StackSet.

    2. Seleccione la ficha Operations (Operaciones) seleccione la operación de detección de desviaciones y, a continuación, seleccione View drift details (Ver detalles de desviación).

    CloudFormation muestra el cuadro de diálogo Operation details (Detalles de la operación).

  5. Espere hasta que CloudFormation complete la operación de detección de desviaciones. Cuando la operación de detección de desviaciones finaliza, CloudFormation actualiza los valores de Estado de desviación y Hora de la última comprobación de desviaciones del StackSet. Estos campos se muestran en la pestaña Información general de la página Detalles de StackSet para el StackSet seleccionado.

    La operación de detección de desviaciones puede tardar un poco, según del número de instancias de pila incluidas en el StackSet, así como del número de recursos incluidos en él. Solo puede ejecutar una única operación de detección de desviaciones en un StackSet determinado a la vez. CloudFormation continúa con la operación de detección de desviaciones incluso después de cerrar la barra de información.

  6. Para revisar los resultados de la detección de desviaciones para las instancias de pila de un StackSet, seleccione la pestaña Instancias de pila.

    La columna Stack name (Nombre de pila) muestra el nombre de la pila asociado a cada instancia de pila, y la columna Drift status (Estado de desviación) muestra el estado de desviación de dicha pila. Se considera que una pila se ha desviado si uno o varios de sus recursos se han desviado.

  7. Para revisar los resultados de la detección de desviaciones de la pila asociada a una instancia de pila específica:

    1. Seleccione la pestaña Operaciones.

    2. Seleccione la operación de desviación de la que quiere ver los resultados de la detección de desviación. Un panel dividido mostrará el estado de la instancia de pila y el motivo de la operación seleccionada. Para una operación de desviación, la columna de razón de estado muestra el estado de desviación de una instancia de pila.

    3. Seleccione la instancia de pila de la que quiere ver los detalles de desviación y elija Ver desviaciones de recursos. En la tabla Estado de desviación de los recursos de la página Desviaciones de recursos, se muestra cada recurso de la pila con su estado de desviación y la última vez que se inició la detección de desviaciones en el recurso. El ID lógico y el ID físico de cada recurso se muestra para ayudarle a identificarlos.

  8. Puede ordenar los recursos en función de su estado mediante la columna Drift status (Estado de desviación ).

    Para ver los detalles de un recurso modificado:

    1. Con el recurso seleccionado, seleccione Ver detalles de desviación.

      CloudFormation muestra la página de detalles de desviación para ese recurso en particular. En esta página se detallan las diferencias del recurso. También muestra los valores de propiedades previstos y actuales del recurso.

      nota

      Si la pila pertenece a una región y una cuenta diferentes a las que está conectado en ese momento, el botón Detectar desviación se deshabilitará y no podrá ver los detalles.

Detección de la desviación en un StackSet (AWS CLI)

Para detectar la desviación en una pila completa a través de la AWS CLI, utilice el siguiente procedimiento:

Detección de la desviación en un StackSet
  1. Utilice el comando detect-stack-set-drift para detectar la desviación en un StackSet completo y sus instancias de pila asociadas.

    En el ejemplo siguiente se inicia la detección de desviación en el StackSet stack-set-drift-example.

    aws cloudformation detect-stack-set-drift \ --stack-set-name stack-set-drift-example

    Salida:

    { "OperationId": "c36e44aa-3a83-411a-b503-cb611example" }
  2. Debido a que las operaciones de detección de desviaciones del StackSet pueden ser operaciones de larga duración, utilice el comando describe-stack-set-operation para supervisar el estado de la operación de desviaciones. Este comando toma el ID de operación del StackSet que el comando detect-stack-set-drift devuelve.

    En los ejemplos siguientes se utiliza el ID de operación del ejemplo anterior para devolver información sobre la operación de detección de desviación del StackSet. En este ejemplo, la operación todavía se está ejecutando. De las siete instancias de pila asociadas a este StackSet, ya se detectó la desviación de una instancia de pila, dos instancias están sincronizadas y la detección de desviaciones de las cuatro instancias de pila restantes aún está en curso. Dado que una instancia se ha desviado, el estado de desviación del StackSet en sí es ahora DRIFTED.

    aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example

    Salida:

    { "StackSetOperation": { "Status": "RUNNING", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] }, "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 1, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:34:28.543Z", "InSyncStackInstancesCount": 2, "InProgressStackInstancesCount": 4, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }

    Al ejecutar el mismo comando más adelante, este ejemplo muestra la información devuelta una vez completada la operación de detección de desviación. Dos de las siete instancias totales de pila asociadas a este StackSet se han desviado, lo que representa el estado de desviación del propio StackSet como DRIFTED.

    aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example

    Salida:

    { "StackSetOperation": { "Status": "SUCCEEDED", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] } "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "EndTimestamp": "2019-12-04T20:37:32.829Z", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InSyncStackInstancesCount": 5, "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  3. Una vez finalizada la operación de detección de desviaciones del StackSet, use los comandos describe-stack-set, list-stack-instances, describe-stack-instance y list-stack-instance-resource-drifts para revisar los resultados.

    El comando describe-stack-set incluye la misma información detallada de desviación devuelta por el comando describe-stack-set-operation.

    aws cloudformation describe-stack-set \ --stack-set-name stack-set-drift-example

    Salida:

    { "StackSet": { "Status": "ACTIVE", "Description": "Demonstration of drift detection on stack sets.", "Parameters": [], "Tags": [ { "Value": "Drift detection", "Key": "Feature" } ], "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "Capabilities": [], "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "DriftDetectionStatus": "COMPLETED", "InSyncStackInstancesCount": 5, "FailedStackInstancesCount": 0 }, "StackSetARN": "arn:aws:cloudformation:us-east-1:123456789012:stackset/stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "TemplateBody": [details omitted], "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22ebexample", "StackSetName": "stack-set-drift-example" } }

    Puede utilizar el comando list-stack-instances para devolver información de resumen sobre las instancias de pila asociadas a un StackSet, incluido el estado de desviación de cada instancia de pila.

    En este ejemplo, la ejecución de list-stack-instances en el StackSet de ejemplo con el filtro de estado de desviación establecido en DRIFTED permite identificar qué dos instancias de pila tienen el estado de desviación DRIFTED.

    aws cloudformation list-stack-instances \ --stack-set-name stack-set-drift-example \ --filters Name=DRIFT_STATUS,Values=DRIFTED

    Salida:

    { "Summaries": [ { "StackId": "arn:aws:cloudformation:eu-west-1:123456789012:stack/StackSet-stack-set-drift-example-b0fb6083-60c0-4e39-af15-2f071e0db90c/0e4f0940-16d4-11ea-93d8-0641cexample", "Status": "CURRENT", "Account": "012345678910", "Region": "eu-west-1", "LastDriftCheckTimestamp": "2019-12-04T20:37:32.687Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, [additional stack instances omitted] ] }

    El comando describe-stack-instance también devuelve esta información, pero para una sola instancia de pila, como en el ejemplo siguiente.

    aws cloudformation describe-stack-instance \ --stack-set-name stack-set-drift-example \ --stack-instance-account 012345678910 --stack-instance-region us-east-1

    Salida:

    { "StackInstance": { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "ParameterOverrides": [], "DriftStatus": "DRIFTED", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  4. Una vez que haya identificado qué instancias de pila se han desviado, puede utilizar la información sobre las instancias de pila devueltas por los comandos list-stack-instances o describe-stack-instance para ejecutar el comando list-stack-instance-resource-drifts. Este comando devuelve información detallada sobre qué recursos de la pila se desviaron para una operación de desvío concreta.

    En el siguiente ejemplo se usa el parámetro --stack-instance-resource-drift-statuses para solicitar información de desviación de pila para los recursos que se modificaron o eliminaron en el ejemplo de operación de desviación anterior. La solicitud devuelve información sobre un recurso que se modificó, incluidos detalles sobre dos de sus propiedades y sus valores modificados. No se ha eliminado ningún recurso.

    aws cloudformation list-stack-instance-resource-drifts \ --stack-set-name my-stack-set-with-resource-drift \ --stack-instance-account 123456789012 \ --stack-instance-region us-east-1 \ --operation-id c36e44aa-3a83-411a-b503-cb611example \ --stack-instance-resource-drift-statuses MODIFIED DELETED

    Salida:

    { "Summaries": [ { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/my-stack-set-with-resource-drift/489e5570-df85-11e7-a7d9-50example", "ResourceType": "AWS::SQS::Queue", "Timestamp": "2018-03-26T17:23:34.489Z", "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/123456789012/my-stack-with-resource-drift-Queue-494PBHCO76H4", "StackResourceDriftStatus": "MODIFIED", "PropertyDifferences": [ { "PropertyPath": "/DelaySeconds", "ActualValue": "120", "ExpectedValue": "20", "DifferenceType": "NOT_EQUAL" }, { "PropertyPath": "/RedrivePolicy/maxReceiveCount", "ActualValue": "12", "ExpectedValue": "10", "DifferenceType": "NOT_EQUAL" } ], "LogicalResourceId": "Queue" } ] }

Detención de la detección de desviaciones en un StackSet

Dado que la detección de desviaciones en un StackSet puede ser una operación de larga duración, puede haber instancias en las que desee detener una operación de detección de desviaciones que se esté ejecutando en un StackSet.

Detención de la detección de desviaciones en un StackSet (consola)
  1. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. En la página StackSets, seleccione el nombre del StackSet.

    CloudFormation muestra la página Detalles de StackSet para el StackSet seleccionado.

  3. En la página StackSets details (Detalles de conjuntos de pilas) seleccione la ficha Operations (Operaciones) y, a continuación, seleccione la operación de detección de desviaciones.

  4. Seleccione Stop operation (Detener operación).

Detención de la detección de desviaciones en un StackSet (AWS CLI)
  • Utilice el comando stop-stack-set-operation. Debe proporcionar tanto el nombre del StackSet como el ID de la operación del StackSet de detección de desviaciones.

    aws cloudformation stop-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id 624af370-311a-11e8-b6b7-500cexample