Detección de la desviación del conjunto de pilas mediante la consola de CloudFormation o la AWS CLI
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 realizar la detección de desviaciones en un conjunto de pila, puede determinar si alguna de las instancias de pila pertenecientes a ese conjunto de pila difiere, o se ha desviado, de su configuración esperada.
Cómo CloudFormation realiza la detección de desviaciones en un conjunto de pila
Cuando CloudFormation ejecuta una detección de desviaciones en un conjunto de pilas, realiza la detección de desviaciones en la pila asociada a cada instancia de pila del conjunto de pilas. 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 en un conjunto de pila se han desviado, se considera que el conjunto de pila 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 realizados directamente en una pila a través de CloudFormation, en lugar de en nivel del conjunto de pilas, no se consideran una desviación. Por ejemplo, supongamos que tiene una pila asociada a una instancia de pila de un conjunto de pila. 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 conjunto de pila. 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 mediante la consola de CloudFormation o la AWS CLI.
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 conjunto de pilas (consola)
Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation
. -
En la página StackSets (Conjuntos de pilas) seleccione el conjunto de pilas en el que desea realizar la detección de desviaciones.
-
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 para el conjunto de pila seleccionado.
-
Opcional: para monitorear el progreso de la operación de detección de desviaciones:
-
Seleccione el nombre del conjunto de pilas para mostrar la página de Stackset details (Detalles del conjunto de pilas).
-
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).
-
-
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 Drift status (Estado de desviaciones) y Last drift check time (Último momento de comprobación de desviaciones) para el conjunto de pila. Estos campos se muestran en la pestaña Overview (Información general) de la página de StackSet details (Detalles de conjunto de pila) para el conjunto de pila 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 conjunto de pilas, así como del número de recursos incluidos en él. Solo puede ejecutar una única operación de detección de desviaciones en una pila determinada 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.
-
Para revisar los resultados de detección de desviaciones para las instancias de pila de un conjunto de pila, seleccione la ficha Stack instances (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.
-
Para revisar los resultados de la detección de desviaciones de la pila asociada a una instancia de pila específica:
-
Seleccione la pestaña Operaciones.
-
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.
-
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.
-
-
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:
-
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 conjunto de pilas (AWS CLI)
Para detectar desviaciones en una pila completa a través de la AWS CLI, utilice los siguientes comandos de aws
cloudformation
:
-
detect-stack-set-drift para iniciar una operación de detección de desviaciones en una pila.
-
describe-stack-set-operation para monitorizar el estado de operación de detección de desviaciones de la pila.
-
Una vez completada la operación de detección de desviaciones, utilice los siguientes comandos para devolver la información de desviación que desee:
-
Utilice describe-stack-set para devolver información detallada sobre el conjunto de pila, incluida información detallada sobre la última operación de desviación realizada en el conjunto de pila. (No se incluye información sobre las operaciones de desviación en curso).
-
Se utiliza list-stack-instances para devolver una lista de instancias de pila pertenecientes al conjunto de pila, incluido el estado de desviación y la hora de la última desviación comprobada de cada instancia.
-
Utilice describe-stack-instance para devolver información detallada sobre una instancia de pila específica, incluido su estado de desviación y la hora de la última desviación comprobada.
-
Use list-stack-instance-resource-drifts para devolver información detallada sobre el estado de desviación de cada recurso en una instancia de pila y la información de resumen sobre las desviaciones de los recursos para una instancia de pila.
-
-
Se utiliza
detect-stack-set-drift
para detectar la desviación en un conjunto de pila completo y sus instancias de pila asociadas.En el ejemplo siguiente se inicia la detección de desviación en el conjunto de pila
stack-set-drift-example
.aws cloudformation detect-stack-set-drift \ --stack-set-name stack-set-drift-example
Salida:
{ "OperationId": "c36e44aa-3a83-411a-b503-cb611example" }
-
Debido a que las operaciones de detección de desviaciones del conjunto de pila pueden ser una operación de larga duración, utilice
describe-stack-set-operation
para monitorear el estado de operación de desviaciones. Este comando toma el ID de operación de conjunto de pila que el comandodetect-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 conjunto de pila. En este ejemplo, la operación todavía se está ejecutando. De las siete instancias de pila asociadas a este conjunto de pilas, 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 conjunto de pilas 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 con este conjunto de pila se han desviado, lo que representa el estado de desviación del conjunto de pila 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" } }
-
Una vez finalizada la operación de detección de desviaciones del conjunto de pilas, use los comandos
describe-stack-set
,list-stack-instances
,describe-stack-instance
ylist-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 comandodescribe-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 conjunto de pila, incluido el estado de desviación de cada instancia de pila.En este ejemplo, la ejecución de
list-stack-instances
en el conjunto de pilas de ejemplo con el filtro de estado de desviación establecido enDRIFTED
permite identificar qué dos instancias de pila tienen un estado de desviación deDRIFTED
.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" } }
-
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
odescribe-stack-instance
para ejecutar 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" } ] }
Detener la detección de desviaciones en un conjunto de pila
Dado que la detección de desviaciones en un conjunto de pila 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 conjunto de pila.
Para detener la detección de desviaciones en un conjunto de pila utilizando la AWS Management Console
Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation
. -
En la página StackSets (Conjuntos de pila) seleccione el nombre del conjunto de pila.
CloudFormation muestra la página StackSets details (Detalles del conjuntos de pilas) para el conjunto de pilas seleccionado.
-
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.
-
Seleccione Stop operation (Detener operación).
Para detener la detección de desviaciones en un conjunto de pila utilizando la AWS CLI
-
Utilice el comando stop-stack-set-operation. Debe proporcionar tanto el nombre del conjunto de pila como el ID de la operación de conjunto de pila 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