Detectar desvios em StackSets do CloudFormation
Mesmo que você gerencie as pilhas e seus respectivos recursos usando o CloudFormation, os usuários poderão alterar esses recursos fora do CloudFormation. Os usuários podem editar recursos diretamente usando o serviço subjacente que os criou. Ao realizar a detecção de desvios em um conjunto de pilhas, você pode determinar se existem instâncias da pilha pertencentes ao conjunto de pilhas que sejam diferentes ou apresentem desvios com relação à configuração esperada.
Tópicos
Como o CloudFormation realiza a detecção de desvios em um conjunto de pilhas
Quando o CloudFormation executa a detecção de desvio em um conjunto de pilhas, ele a executa na pilha associada a cada instância de pilha no conjunto de pilhas. Para isso, o CloudFormation compara o estado atual de cada recurso na pilha com o estado esperado desse recurso, conforme definido no modelo da pilha e em todos os parâmetros de entrada especificados. Se o estado atual de um recurso for diferente do estado esperado, esse recurso será considerado como contendo desvios. Se um ou mais recursos em uma pilha apresentarem desvios, a própria pilha será considerada como contendo desvios e as instâncias da pilha às quais a pilha está associada também serão consideradas como contendo desvios. Se uma ou mais instâncias da pilha em um conjunto de pilhas apresentarem desvios, o próprio conjunto de pilhas será considerado como contendo desvios.
A detecção de desvios identifica alterações não gerenciadas; ou seja, as alterações feitas nas pilhas fora do CloudFormation. As alterações feitas diretamente em uma pilha por meio do CloudFormation, em vez de no nível do conjunto de pilhas, não são consideradas como desvios. Por exemplo, suponha que você tenha uma pilha que está associada a uma instância de pilha de um conjunto de pilhas. Se você usar o CloudFormation para atualizar essa pilha a fim de usar um modelo diferente, isso não será considerado um desvio, mesmo que essa pilha tenha um modelo diferente das outras pilhas pertencentes a esse conjunto de pilhas. Isso ocorre porque a pilha ainda corresponderá ao modelo esperado e à configuração do parâmetro no CloudFormation.
Para obter informações detalhadas sobre como o CloudFormation realiza a detecção de desvios em uma pilha, consulte Detectar alterações de configuração não gerenciadas em pilhas e recursos com detecção de desvios.
Como o CloudFormation executa a detecção de desvios individualmente em cada pilha, ele considera todos os valores de parâmetros substituídos ao determinar se uma pilha está com desvios. Para saber mais sobre como substituir parâmetros de modelos em instâncias de pilhas, consulte Substituir valores de parâmetros em instâncias de pilhas em StackSets do CloudFormation.
Caso execute a detecção de desvios diretamente em uma pilha que esteja associada a uma instância de pilha, esses resultados de desvios não estarão disponíveis na página do console StackSets (Conjunto de pilhas).
Detectar desvios em um conjunto de pilhas (console)
Para detectar desvios em um conjunto de pilhas
Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página StackSets (Conjuntos de pilhas), selecione o conjunto de pilhas no qual deseja executar a detecção de desvios.
-
No menu Actions (Ações), selecione Detect drifts (Detectar desvios).
O CloudFormation exibe uma barra de informações que declara que a detecção de desvios foi iniciada para o conjunto de pilhas selecionado.
-
Opcional: para monitorar o progresso da operação de detecção de desvios:
-
Selecione o nome do conjunto de pilhas para exibir a página Stackset details (Detalhes do conjunto de pilhas).
-
Selecione a guia Operations (Operações), selecione a operação de detecção de desvios e selecione View drift details (Visualizar detalhes do desvio).
O CloudFormation exibe a caixa de diálogo Operation details (Detalhes da operação).
-
-
Aguarde até que o CloudFormation conclua a operação de detecção de desvios. Quando a operação de detecção de desvios estiver concluída, o CloudFormation atualizará o Drift status (Status de desvio) e o Last drift check time (Tempo da última verificação de desvio) para o conjunto de pilhas. Estes campos estão listados na guia Overview (Visão geral) da página StackSet details (Detalhes do conjunto de pilhas) para o conjunto de pilhas selecionado.
A operação de detecção de desvios pode levar algum tempo, dependendo do número de instâncias de pilhas incluídas no conjunto de pilhas e do número de recursos incluídos no conjunto de pilhas. Você só pode executar uma operação de detecção de desvio em uma determinada pilha ao mesmo tempo. O CloudFormation continua a operação de detecção de desvios mesmo depois de você descartar a barra de informações.
-
Para revisar os resultados de detecção de desvios para as instâncias da pilha em um conjunto de pilhas, selecione a guia Stack instances (Instâncias da pilha).
A coluna Stack name (Nome da pilha) lista o nome da pilha associada a cada instância de pilha e a coluna Drift status (Status de desvio) lista o status do desvio da pilha. Considera-se que uma pilha foi desviada se um ou mais de seus recursos foram desviados.
-
Para revisar os resultados da detecção de desvios da pilha associada a uma instância de pilha específica:
-
Escolha a guia Operações.
-
Selecione a operação de desvio para a qual você deseja visualizar os resultados da detecção de desvio. Um painel dividido exibirá o status da instância da pilha e o motivo da operação selecionada. Para uma operação de desvio, a coluna de motivo do status mostra o status do desvio de uma instância de pilha.
-
Escolha a instância de pilha para a qual você deseja visualizar os detalhes do desvio e escolha Exibir desvios de recursos. Na tabela Status de desvios de recursos, na página Desvios de recursos, cada recurso de pilha é listado com seu status de desvio dele e a última vez em que a detecção de desvios foi iniciada no recurso. O ID lógico e o ID físico de cada recurso são exibidos para ajudar você a identificá-los.
-
-
É possível classificar os recursos com base em seus status de desvio usando a coluna Drift status (Status de desvio).
Para visualizar os detalhes em um recurso modificado:
-
Com o recurso selecionado, escolha Visualizar detalhes de desvio.
O CloudFormation exibirá a página de detalhes de desvios desse recurso em particular. Esta página lista as diferenças do recurso. Ela também lista os valores de propriedade esperados e atuais do recurso.
nota
Se a pilha pertencer a uma região e conta diferentes daquela em que você está conectado atualmente, o botão Detectar desvio será desabilitado e você não poderá ver os detalhes.
-
Detectar desvios em um conjunto de pilhas (AWS CLI)
Para detectar desvios em uma pilha inteira usando a AWS CLI, use o seguinte procedimento:
Para detectar desvios em um conjunto de pilhas
-
Use o comando detect-stack-set-drift para detectar desvios em um conjunto de pilhas inteiro e nas instâncias de pilhas associadas.
O exemplo a seguir inicia a detecção de desvios no conjunto de pilhas
stack-set-drift-example
.aws cloudformation detect-stack-set-drift \ --stack-set-name stack-set-drift-example
Saída:
{ "OperationId": "c36e44aa-3a83-411a-b503-cb611example" }
-
Como as operações de detecção de desvios em um conjunto de pilhas podem demorar, use o comando describe-stack-set-operation para monitorar o status da operação de detecção de desvios. Este comando usa o ID da operação do conjunto de pilhas retornado pelo comando detect-stack-set-drift.
Os exemplos a seguir usam o ID da operação do exemplo anterior para retornar informações sobre a operação de detecção de desvios do conjunto de pilhas. Neste exemplo, a operação ainda está em andamento. Das sete instâncias de pilha associadas a esse conjunto de pilhas, uma instância da pilha já foi detectada como dessincronizada, duas instâncias estão sincronizadas e a detecção de desvios para as outras quatro instâncias da pilha ainda está em andamento. Como uma instância está com desvio, o status de desvio do próprio conjunto de pilhas está como
DRIFTED
.aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example
Saída:
{ "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" } }
Ao executar o mesmo comando posteriormente, este exemplo mostra as informações retornadas após a operação de detecção de desvios ter sido concluída. Duas das sete instâncias da pilha associada a este conjunto de pilhas estão dessincronizadas, renderizando o status de desvio do próprio conjunto de pilhas como
DRIFTED
.aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example
Saída:
{ "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" } }
-
Quando a operação de detecção de desvios do conjunto de pilhas estiver concluída, use os comandos describe-stack-set, list-stack-instances, describe-stack-instance e list-stack-instance-resource-drifts para revisar os resultados.
O comando describe-stack-set inclui as mesmas informações detalhadas de desvios retornadas pelo comando describe-stack-set-operation.
aws cloudformation describe-stack-set \ --stack-set-name stack-set-drift-example
Saída:
{ "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" } }
Você pode usar o comando list-stack-instances para retornar informações resumidas sobre as instâncias da pilha associada a um conjunto de pilhas, incluindo o status de desvio de cada instância da pilha.
Neste exemplo, executar list-stack-instances no conjunto de pilhas de exemplo com o filtro de status de desvio definido como
DRIFTED
permite identificar quais duas instâncias da pilha têm um status de desvio deDRIFTED
.aws cloudformation list-stack-instances \ --stack-set-name stack-set-drift-example \ --filters Name=DRIFT_STATUS,Values=DRIFTED
Saída:
{ "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]
] }O comando describe-stack-instance também retorna essas informações, mas para uma única instância da pilha, como no exemplo abaixo.
aws cloudformation describe-stack-instance \ --stack-set-name stack-set-drift-example \ --stack-instance-account 012345678910 --stack-instance-region us-east-1
Saída:
{ "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" } }
-
Após identificar as instâncias de pilha em que ocorreram desvios, você pode usar as informações sobre as instâncias de pilhas retornadas pelos comandos list-stack-instances ou describe-stack-instance para executar o comando list-stack-instance-resource-drifts. Este comando retorna as informações detalhadas sobre quais recursos na pilha apresentam desvios para uma operação de desvio em particular.
O exemplo a seguir usa o parâmetro
--stack-instance-resource-drift-statuses
para solicitar informações de desvio de pilha para os recursos que foram modificados ou excluídos no exemplo de operação de desvio anterior. A solicitação retorna informações sobre o único recurso que foi modificado, incluindo detalhes sobre duas de suas propriedades e seus valores alterados. Nenhum recurso foi excluído.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
Saída:
{ "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" } ] }
Interromper a detecção de desvios em um conjunto de pilhas
Como a detecção de desvios em um conjunto de pilhas pode ser uma operação de longa execução, é possível que existam instâncias quando decidir interromper uma operação de detecção de desvios em andamento em um conjunto de pilhas.
Para interromper a detecção de desvios em um conjunto de pilhas (console)
Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página StackSets (Conjuntos de pilhas) selecione o nome do conjunto de pilhas.
O CloudFormation exibe a página StackSets details (Detalhes dos conjuntos de pilhas) para o conjunto de pilhas selecionado.
-
Na página StackSets details (Detalhes dos conjuntos de pilhas), selecione a guia Operations (Operações) e selecione a operação de detecção de desvios.
-
Selecione Stop operation (Interromper operação).
Para interromper a detecção de desvios em um conjunto de pilhas (AWS CLI)
-
Use o comando stop-stack-set-operation. Você deve fornecer o nome do conjunto de pilhas e o ID da operação de detecção de desvios do conjunto de pilhas.
aws cloudformation stop-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id 624af370-311a-11e8-b6b7-500cexample