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 StackSet, você pode determinar se existem instâncias da pilha pertencentes ao StackSet que sejam diferentes ou apresentem desvios com relação à configuração esperada.
Tópicos
Como o CloudFormation executa a detecção de desvios em um StackSet
Quando o CloudFormation executa a detecção de desvios em um StackSet, ele a executa na pilha associada a cada instância de pilha no StackSet. 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 StackSet apresentarem desvios, o próprio StackSet 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 StackSet, 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 StackSet. 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 ao StackSet. 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 nas pilhas do StackSet 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 StackSet (console)
Para detectar desvios em um StackSet
Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página StackSets, selecione o StackSet em que 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 StackSet selecionado.
-
Opcional: para monitorar o progresso da operação de detecção de desvios:
-
Selecione o nome do StackSet para exibir a página Detalhes do StackSet.
-
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 for concluída, o CloudFormation atualizará o Status do desvio e o Tempo da última verificação de desvios do seu StackSet. Esses campos estão listados na guia Visão geral da página Detalhes do StackSet do StackSet selecionado.
A operação de detecção de desvios pode levar algum tempo, dependendo do número de instâncias de pilha e do número de recursos incluídos no StackSet. Você só pode executar uma operação de detecção de desvios por vez em um determinado StackSet. O CloudFormation continua a operação de detecção de desvios mesmo depois de você descartar a barra de informações.
-
Para analisar os resultados de detecção de desvios para as instâncias de pilha em um StackSet, selecione a guia Instâncias de 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 StackSet (AWS CLI)
Para detectar desvios em uma pilha inteira usando a AWS CLI, use o seguinte procedimento:
Para detectar desvios em um StackSet
-
Use o comando detect-stack-set-drift para detectar desvios em todo o StackSet e nas instâncias de pilha associadas.
O exemplo a seguir inicia a detecção de desvios no StackSet
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 StackSet podem demorar, use o comando describe-stack-set-operation para monitorar o status da operação de desvios. Esse comando usa o ID da operação do StackSet 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 StackSet. Neste exemplo, a operação ainda está em andamento. Das sete instâncias de pilha associadas a esse StackSet, uma instância de pilha já foi detectada como com desvio, duas instâncias estão sincronizadas e a detecção de desvios para as outras quatro instâncias de pilha ainda está em andamento. Como uma instância está com desvio, o status de desvio do próprio StackSet está agora como
DRIFTED
.aws cloudformation describe-stack-set-operation \ --stack-set-name
stack-set-drift-example
\ --operation-idc36e44aa-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 de pilha associadas a esse StackSet estão com desvio, renderizando o status de desvio do próprio StackSet como
DRIFTED
.aws cloudformation describe-stack-set-operation \ --stack-set-name
stack-set-drift-example
\ --operation-idc36e44aa-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 StackSet estiver concluída, use os comandos describe-stack-set, list-stack-instances, describe-stack-instance e list-stack-instance-resource-drifts para analisar 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 de pilha associadas a um StackSet, incluindo o status de desvio de cada instância de pilha.
Neste exemplo, executar list-stack-instances no StackSet de exemplo com o filtro de status de desvio definido como
DRIFTED
permite identificar quais duas instâncias de pilha têm um status de desvio deDRIFTED
.aws cloudformation list-stack-instances \ --stack-set-name
stack-set-drift-example
\ --filtersName=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-account012345678910
--stack-instance-regionus-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-account123456789012
\ --stack-instance-regionus-east-1
\ --operation-idc36e44aa-3a83-411a-b503-cb611example
\ --stack-instance-resource-drift-statusesMODIFIED 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" } ] }
Como interromper a detecção de desvios em um StackSet
Como a detecção de desvios em um StackSet 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 StackSet.
Para interromper a detecção de desvios em um StackSet (console)
Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página StackSets selecione o nome do StackSet.
O CloudFormation exibe a página Detalhes dos StackSets para o StackSet 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 StackSet (AWS CLI)
-
Use o comando stop-stack-set-operation. Você deve fornecer o nome e o ID da operação de detecção de desvios do StackSet.
aws cloudformation stop-stack-set-operation \ --stack-set-name
stack-set-drift-example
\ --operation-id624af370-311a-11e8-b6b7-500cexample