

# Detectar alterações de configuração não gerenciadas em pilhas e recursos com detecção de desvios
<a name="using-cfn-stack-drift"></a>

Mesmo que você gerencie seus recursos com o CloudFormation, os usuários podem alterá-los fora do CloudFormation. Os usuários podem editar recursos diretamente usando o serviço subjacente que os criou. Por exemplo, você pode usar o console do Amazon EC2 para atualizar uma instância de servidor que foi criada como parte de uma pilha do CloudFormation. Algumas mudanças podem ser acidentais e algumas podem ser feitas intencionalmente para responder a eventos operacionais sensíveis ao tempo. Independentemente disso, as alterações feitas fora do CloudFormation podem complicar as operações de atualização ou exclusão de pilha. Você pode usar a detecção de desvio para identificar recursos de pilha para os quais alterações de configuração foram feitas fora do gerenciamento do CloudFormation. Depois, é possível tomar medidas corretivas para que seus recursos de pilha estejam novamente em sincronia com suas definições no modelo de pilha, como atualizar os recursos desviados diretamente para que eles correspondam à definição do modelo. Resolver o desvio ajuda a garantir a consistência da configuração e operações de pilha bem-sucedidas.

**Topics**
+ [O que é desvio?](#what-is-drift)
+ [Códigos de status de detecção de desvio](#drift-status-codes)
+ [Considerações ao detectar o desvio](#drift-considerations)
+ [Detectar desvio em uma pilha inteira do CloudFormation](detect-drift-stack.md)
+ [Detectar desvios em recursos de pilha individuais](detect-drift-resource.md)
+ [Resolver o desvio com uma operação de importação](resource-import-resolve-drift.md)

## O que é desvio?
<a name="what-is-drift"></a>

A detecção de desvio permite detectar se a configuração real de uma pilha difere ou se *desviou* da configuração esperada. Use o CloudFormation para detectar desvios em uma pilha inteira ou em recursos individuais dentro da pilha. Considera-se que um recurso foi desviado se algum dos seus valores de propriedade reais for diferente dos valores de propriedade esperados. Isso inclui se a propriedade ou o recurso foi excluído. Considera-se que uma pilha foi desviada se um ou mais de seus recursos foram desviados.

Para determinar se um recurso foi desviado, o CloudFormation determina os valores de propriedades de recursos esperados, conforme definido no modelo de pilha, e quaisquer valores especificados como parâmetros de modelo. Em seguida, o CloudFormation compara esses valores esperados com os valores reais dessas propriedades de recursos existentes atualmente na pilha. Considera-se que um recurso foi desviado quando uma ou mais de suas propriedades foi excluídas ou teve seu valor alterado.

O CloudFormation gera informações detalhadas sobre cada recurso na pilha que se desviou.

O CloudFormation detecta desvios nos recursos da AWS que suportam a detecção de desvios. Recursos sem suporte para a detecção de desvio recebem um status de desvio de NOT\$1CHECKED. Para obter uma lista de recursos da AWS que oferecem suporte à detecção de desvios, consulte [Suporte a tipos de recursos](resource-import-supported-resources.md).

Além disso, o CloudFormation é compatível com a detecção de desvios em tipos de recursos privados *provisionáveis*, ou seja, com tipo de provisionamento `FULLY_MUTABLE` ou `IMMUTABLE`. Para realizar a detecção de desvios em um recurso de tipo privado, a versão padrão do tipo de recurso que você registrou em sua conta deve ser provisionável. Para obter mais informações sobre o tipo de provisão de recursos, consulte o parâmetro `ProvisioningType` da ação [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html) na *Referência de APIs do AWS CloudFormation* e o comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html) na *Referência de comandos da AWS CLI*. Para obter mais informações sobre recursos privados, consulte [Gerenciar extensões com o registro do CloudFormation](registry.md).

Você pode realizar a detecção de desvio em pilhas com os seguintes status: `CREATE_COMPLETE`, `UPDATE_COMPLETE`, `UPDATE_ROLLBACK_COMPLETE` e `UPDATE_ROLLBACK_FAILED`.

Ao detectar o desvio em uma pilha, o CloudFormation não detecta desvios em nenhuma pilha aninhada que pertença a essa pilha. Para obter mais informações, consulte [Dividir um modelo em partes reutilizáveis usando pilhas aninhadas](using-cfn-nested-stacks.md). Em vez disso, você pode iniciar uma operação de detecção de desvio diretamente na pilha aninhada.

**nota**  
O CloudFormation determina apenas o desvio para valores de propriedade explicitamente definidos, seja por meio do modelo de pilha ou especificando parâmetros de modelo. Isso não inclui valores padrão para propriedades de recursos. Para que o CloudFormation controle uma propriedade de recurso para fins de determinação de desvio, defina explicitamente o valor da propriedade, mesmo que você a esteja está definindo com o valor padrão.

## Códigos de status de detecção de desvio
<a name="drift-status-codes"></a>

As tabelas nesta seção descrevem os vários tipos de status usados com a detecção de desvio:
+ **Status da operação de detecção de desvio** descreve o estado atual da operação de desvio.
+ **Status do desvio** 

  Em conjuntos de pilhas, isso descreve o status do desvio do conjunto de pilhas como um todo, com base no status do desvio das instâncias de pilha que pertencem a ele.

  Em instâncias de pilha, isso descreve o status do desvio da instância de pilha, com base no status do desvio da pilha associada.

  Em pilhas, isso descreve o status do desvio da pilha como um todo, com base no status do desvio dos recursos.
+ ** Status de desvio de recursos ** descreve o status de desvio de um recurso individual.

A tabela a seguir lista os códigos de status que o CloudFormation atribui a operações de detecção de desvio de pilha.


| Status da operação de detecção de desvio | Descrição | 
| --- | --- | 
|  `DETECTION_COMPLETE`  |  A operação de detecção de desvio de pilha foi concluída com êxito para todos os recursos na pilha compatível com a detecção de desvio.  | 
|  `DETECTION_FAILED`  |  A operação de detecção de desvio de pilha falhou para pelo menos um recurso na pilha. Os resultados estarão disponíveis para recursos nos quais o CloudFormation concluiu com êxito a detecção de desvio.  | 
|  `DETECTION_IN_PROGRESS`  |  A operação de detecção de desvio de pilha está em andamento.  | 

A tabela a seguir lista os códigos de status de desvio doCloudFormation atribuídos a pilhas.


| Status do desvio | Descrição | 
| --- | --- | 
|  `DRIFTED`  |  Em pilhas: a pilha é diferente, ou foi *desviada* de sua configuração de modelo esperada. Considera-se que uma pilha foi desviada se um ou mais de seus recursos foram desviados. Em instâncias de pilha: uma instância de pilha é considerada com desvio se a pilha associada a ela tiver desviado. Em conjuntos de pilhas: um conjunto de pilhas é considerado com desvio se uma ou mais instâncias de pilha tiverem desviado.  | 
|  `NOT_CHECKED`  |  O CloudFormation não verificou se a pilha, o conjunto de pilha ou a instância de pilha difere da configuração de modelo esperada.  | 
|  `IN_SYNC`  |  A configuração atual de cada recurso compatível corresponde à sua configuração de modelo esperada. Uma pilha, um conjunto de pilha ou uma instância de pilha sem recursos que ofereçam suporte à detecção de desvio também terá um status de IN\$1SYNC.  | 

A tabela a seguir lista os códigos de status de desvio que o CloudFormation atribui a recursos de pilha.


| Status de desvio do recurso | Descrição | 
| --- | --- | 
|  `DELETED`  |  O recurso difere de sua configuração de modelo esperada porque o recurso foi excluído.  | 
|  `MODIFIED`  |  O recurso difere de sua configuração de modelo esperada.  | 
|  `NOT_CHECKED`  |  O CloudFormation não verificou se o recurso é diferente da configuração de modelo esperada.  | 
|  `IN_SYNC`  |  A configuração atual do recurso corresponde à configuração do modelo esperada.  | 

A tabela a seguir lista os códigos de status de tipos de diferença que o CloudFormation atribui às propriedades do recurso que diferem de configurações de modelo esperadas.


| Tipos de diferenças de propriedades | Descrição | 
| --- | --- | 
|  `ADD`  |  Um valor foi adicionado a uma propriedade de recurso que é um tipo de dados de matriz ou lista.   | 
|  `REMOVE`  |  A propriedade foi removida da configuração atual do recurso.  | 
|  `NOT_EQUAL`  |  O valor da propriedade atual difere de seu valor esperado, conforme definido no modelo de pilha.  | 

## Considerações ao detectar o desvio
<a name="drift-considerations"></a>

Para realizar com êxito a detecção de desvio em uma pilha, um usuário deve ter as seguintes permissões:
+ Permissão de leitura para cada recurso compatível com a detecção de desvio incluída na pilha. Por exemplo, se a pilha inclui um recurso `AWS::EC2::Instance`, você deverá ter a permissão `ec2:DescribeInstances` para realizar a detecção de desvio na pilha.
+ `cloudformation:DetectStackDrift`
+ `cloudformation:DetectStackResourceDrift`
+ `cloudformation:BatchDescribeTypeConfigurations`

Para obter mais informações sobre a configuração de permissões no CloudFormation, consulte [Controle o acesso ao CloudFormation com o AWS Identity and Access Management](control-access-with-iam.md).

Em certos casos de ponto, o CloudFormationpode não ser capaz de sempre retornar resultados precisos de desvio. Você deve estar ciente desses casos de ponto para interpretar corretamente seus resultados de detecção de desvio.
+ Em certos casos, os objetos contidos em matrizes de propriedades serão relatados como desvios, quando, na verdade, são valores padrão fornecidos à propriedade a partir do serviço subjacente responsável pelo recurso.
+ Certos recursos têm relacionamentos de anexo com recursos relacionados, de modo que um recurso pode realmente anexar ou remover valores de propriedade de outro recurso, definidos no mesmo modelo ou em outro. Por exemplo, os recursos `AWS::EC2::SecurityGroupIngress` e `AWS::EC2::SecurityGroupEgress` podem ser usados para prender e remover valores de recursos `AWS::EC2::SecurityGroup`. Nesses casos, o CloudFormation analisa o modelo de pilha de anexos antes de realizar a comparação de desvio. No entanto, o CloudFormation não pode executar essa análise entre as pilhas e, portanto, pode não retornar resultados precisos de desvio quando os recursos anexados residem em pilhas diferentes.

  Recursos compatível com a detecção de desvio e que permitem ou exigem anexos de outros recursos incluem:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)
+ O CloudFormation não realiza a detecção de desvio na propriedade `KMSKeyId` de recursos. Como chaves do AWS KMS podem ser referenciadas por vários aliases, o CloudFormation não pode garantir resultados de desvio consistentemente precisos para essa propriedade.
+ Há certas propriedades de recurso que você pode especificar em seu modelo de pilha que, pela própria natureza, o CloudFormation não será capaz de comparar com as propriedades nos recursos de pilha resultantes. Portanto, essas propriedades não podem ser incluídas nos resultados da detecção de desvio. Essas propriedades se dividem em duas grandes categorias:
  + Valores de propriedade que o CloudFormation não pode mapear de volta para o valor de propriedade de recurso inicial no modelo de pilha.

    Por exemplo, o CloudFormation não pode mapear o código-fonte de uma função do Lambda de volta ao tipo de propriedade [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-lambda-function-code.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-lambda-function-code.html) do recurso [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html) e, portanto, o CloudFormation não pode incluí-lo em resultados de detecção de desvio. 
  + Os valores de propriedades que o serviço responsável pelo recurso não retorna.

    Há determinados valores de propriedades que, por natureza, nunca são retornados pelo serviço ao qual o recurso pertence. Eles tendem a conter informações confidenciais, como senhas ou outros dados confidenciais que não devem ser expostos. Por exemplo, o serviço do IAM nunca retornará o valor da propriedade `Password` do tipo de propriedade [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html), e, portanto, o CloudFormation não poderá incluí-lo em resultados de detecção de desvio.
  + Objetos em uma matriz podem ser, na verdade, padrões de serviço, e não desvios adicionados manualmente.
+ Se você encontrar algum falso positivo, envie seus comentários usando o link de feedback no console do CloudFormation ou entre em contato conosco em [AWS re:Post](https://repost.aws/).
+ Algumas propriedades podem ter valores de entrada equivalentes, mas não idênticos. Para evitar falsos positivos, você deve garantir que a configuração esperada corresponda à configuração real.
  + Por exemplo, a configuração esperada da propriedade do recurso pode ser 1024 MB e a configuração real da mesma propriedade de recurso pode ser 1 GB. 1024 MB e 1 GB são equivalentes, mas não idênticos.

    Quando a detecção de desvio é executada nessa propriedade de recurso, ela sinaliza resultados com desvios.

    Para evitar esse falso positivo, altere a configuração esperada da propriedade do recurso para 1024 MB e depois execute a detecção de desvio.

# Detectar desvio em uma pilha inteira do CloudFormation
<a name="detect-drift-stack"></a>

A realização de uma operação de detecção de desvio em uma pilha determina se essa pilha se desviou de sua configuração de modelo esperada e retorna informações detalhadas sobre o status de desvio de cada recurso na pilha que oferece suporte para a detecção de desvio.

**Para detectar o desvio em uma pilha inteira usando o Console de gerenciamento da AWS**

1. Abra o console do CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na lista de pilhas, selecione a pilha em que deseja executar a detecção de desvio. No painel de detalhes da pilha, escolha **Stack actions (Ações da pilha)** e selecione **Detect drift (Detectar desvio)**.  
![\[O comando Detect drift for current stack (Detectar desvio da pilha atual) no menu Stack actions (Ações da pilha) da pilha selecionada.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/console-stacks-actions-detect-drift-1.png)

   O CloudFormation exibe uma barra de informações que declara que a detecção de desvio foi iniciada para a pilha selecionada.

1. Aguarde até que o CloudFormation conclua a operação de detecção de desvios. Quando a operação de detecção de desvio for concluída, o CloudFormation atualizará o **Status de desvio** e o **Tempo da última verificação de desvio** para sua pilha. Esses campos estão listados na seção **Overview (Visão geral)** do painel **Stack info (Informações da pilha)** da página de detalhes da pilha.

   A operação de detecção de desvio pode levar vários minutos, dependendo do número de recursos incluídos na pilha. 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.

1. Revise os resultados da detecção de desvio para a pilha e seus recursos. Com a pilha selecionada, no menu **Stack actions** (Ações da pilha) selecione **View drift results** (Visualizar os resultados de desvio).

   O CloudFormation lista o status geral de desvio da pilha, bem como a última vez que a detecção de desvio foi iniciada na pilha ou em qualquer um dos recursos individuais dela. Considera-se que uma pilha foi desviada se um ou mais de seus recursos foram desviados.  
![\[A página Drifts (Desvios) da pilha selecionada, mostrando o status global de desvio da pilha, o status de detecção de desvio e a última vez em que a detecção de desvio foi iniciada na pilha ou em qualquer um de seus recursos individuais.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-overview-1.png)

   Na seção **Status de desvio do recurso**, o CloudFormation lista cada recurso de pilha, o 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. Além disso, para recursos com status **MODIFIED**, o CloudFormation exibe detalhes de desvios do recurso.

   É possível classificar os recursos com base em seus status de desvio usando a coluna **Drift status (Status de desvio)**.

   1. Para visualizar os detalhes em um recurso modificado.

     1. Com o recurso modificado selecionado, escolha **View drift details** (Visualizar detalhes de desvio).

       O CloudFormation exibe a página de detalhes de desvios desse recurso. Esta página lista os valores de propriedade esperados e atuais do recurso e quaisquer diferenças entre os dois.

       Para destacar uma diferença, na seção **Differences (Diferenças)**, selecione o nome da propriedade.
       + As propriedades adicionadas são destacadas em verde na coluna **Current (Atuais)** da seção **Details (Detalhes)**.
       + As propriedades excluídas são destacadas em vermelho na coluna **Expected (Esperadas)** da seção **Details (Detalhes)**.
       + As propriedades cujo valor foi alterado são destacadas em amarelo nas colunas **Expected (Esperadas)** e **Current (Atuais)**.  
![\[A seção Status de desvios de recursos da página Detalhes de desvios, que contém as informações de desvio para cada recurso na pilha com suporte para detecção de desvios. Os detalhes incluem o status de desvio e os valores de propriedade esperados e atuais.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**Para detectar o desvio em uma pilha inteira usando o AWS CLI**
**Importante**  
Consulte o **Horário da última verificação de desvio** da pilha e confirme se é anterior ao carimbo de data/hora mostrado nos resultados do desvio do recurso para evitar o uso de dados desatualizados.

Para detectar desvios em uma pilha inteira usando a AWS CLI, use os seguintes comandos AWS CLI:
+ **detect-stack-drift** para iniciar uma operação de detecção de desvio em uma pilha.
+ **describe-stack-drift-detection-status** para monitorar o status da operação de detecção de desvio da pilha.
+ **describe-stack-resource-drifts** para rever os detalhes da operação de detecção de desvio da pilha.

1. Use o **detect-stack-drift** para detectar o desvio em uma pilha inteira. Especifique o nome da pilha ou o ARN. Você também pode especificar os IDs lógicos de quaisquer recursos específicos que você deseja usar como filtros para essa operação de detecção de desvio.

   ```
   aws cloudformation detect-stack-drift --stack-name my-stack-with-resource-drift
   ```

   Resultado:

   ```
   {
       "StackDriftDetectionId": "624af370-311a-11e8-b6b7-500cexample"
   }
   ```

1. Como as operações de detecção de desvio de pilha podem ser de longa execução, use **describe-stack-drift-detection-status** para monitorar o status da operação de desvio. Esse comando usa o ID de detecção de desvio da pilha retornado pelo comando **detect-stack-drift**.

   No exemplo abaixo, pegamos o ID de detecção de desvio da pilha retornado pelo exemplo acima de **detect-stack-drift**e o transmitimos como um parâmetro para **describe-stack-drift-detection-status**. O parâmetro retorna detalhes da operação que mostram que a operação de detecção de desvio foi concluída, que um recurso de pilha única foi desviado e que a pilha inteira é considerada como tendo sido desviada como resultado.

   ```
   aws cloudformation describe-stack-drift-detection-status --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample
   ```

   Resultado:

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
       "StackDriftDetectionId": "624af370-311a-11e8-b6b7-500cexample", 
       "StackDriftStatus": "DRIFTED", 
       "Timestamp": "2018-03-26T17:23:22.279Z", 
       "DetectionStatus": "DETECTION_COMPLETE", 
       "DriftedStackResourceCount": 1
   }
   ```

1. Quando a operação de detecção de desvio de pilha estiver concluída, use o comando **describe-stack-resource-drifts** para rever os resultados, incluindo valores de propriedade reais e esperados para os recursos que se desviaram.

   O exemplo abaixo usa a opção `--stack-resource-drift-status-filters` para solicitar informações de desvio de pilha para os recursos que foram modificados ou excluídos. A solicitação retorna informações sobre o único recurso que foi modificado, incluindo detalhes sobre duas de suas propriedades cujos valores foram alterados. Nenhum recurso foi excluído.

   ```
   aws cloudformation describe-stack-resource-drifts --stack-name my-stack-with-resource-drift --stack-resource-drift-status-filters MODIFIED DELETED
   ```

   Resultado:

   ```
   {
       "StackResourceDrifts": [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
               "ActualProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":120,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":12},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
               "ResourceType": "AWS::SQS::Queue", 
               "Timestamp": "2018-03-26T17:23:34.489Z", 
               "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/099908667365/my-stack-with-resource-drift-Queue-494PBHCO76H4", 
               "StackResourceDriftStatus": "MODIFIED", 
               "ExpectedProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":20,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":10},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
               "PropertyDifferences": [
                   {
                       "PropertyPath": "/DelaySeconds", 
                       "ActualValue": "120", 
                       "ExpectedValue": "20", 
                       "DifferenceType": "NOT_EQUAL"
                   }, 
                   {
                       "PropertyPath": "/RedrivePolicy/maxReceiveCount", 
                       "ActualValue": "12", 
                       "ExpectedValue": "10", 
                       "DifferenceType": "NOT_EQUAL"
                   }
               ], 
               "LogicalResourceId": "Queue"
           }
       ]
   }
   ```

# Detectar desvios em recursos de pilha individuais
<a name="detect-drift-resource"></a>

Você pode detectar desvios em recursos específicos dentro de uma pilha, em vez de na pilha inteira. Isso é especialmente útil quando você só precisa determinar se recursos específicos agora correspondem às configurações de modelo esperadas novamente.

Ao realizar a detecção de desvio em um recurso, o CloudFormation também atualiza o status global de desvio da pilha e o **Tempo da última verificação de desvio**, se aplicável. Por exemplo, suponha que uma pilha tenha um status de desvio de `IN_SYNC`. O CloudFormation realiza a detecção de desvio de um ou mais recursos contidos nessa pilha, e o CloudFormation detecta que um ou mais desses recursos se desviou. O CloudFormation atualiza o status de desvio da pilha para `DRIFTED`. Por outro lado, suponha que você tenha uma pilha com um status de desvio de `DRIFTED` como resultado de um único recurso desviado. Se você definir esse recurso de volta para os valores de propriedade esperados e, em seguida, detectar o desvio no recurso novamente, o CloudFormation atualizará o status de desvio de recurso e o status de desvio de pilha para `IN_SYNC` sem exigir que você detecte o desvio na pilha inteira novamente.

**Para detectar desvios em um recurso individual usando o Console de gerenciamento da AWS**

1. Abra o console do CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na lista de pilhas, selecione a pilha que contém o recurso. O CloudFormation exibe os detalhes dessa pilha.

1. No painel de navegação esquerdo, em **Pilhas**, escolha **Ações de pilha** e **Detectar desvio**.

1. Em **Resource drift status (Status de desvio do recurso)**, escolha o recurso e selecione **Detect drift for resource (Detectar desvio para o recurso)**.

   O CloudFormation realiza a detecção de desvio no recurso selecionado. Se tiver êxito, o CloudFormation atualizará o status de desvio do recurso e o status geral de desvio da pilha, se necessário. O CloudFormation também atualizará o timestamp de quando a detecção de desvio foi executada pela última vez no recurso, e a pilha como um todo. Se o recurso tiver sido modificado, o CloudFormation exibirá informações detalhadas de desvio sobre os valores de propriedade esperados e atuais do recurso.

1. Revise os resultados da detecção de desvio do recurso.

   1. Para visualizar os detalhes em um recurso modificado.

     1. Com o recurso modificado selecionado, escolha **View drift details** (Visualizar detalhes de desvio).

       O CloudFormation exibe os detalhes de desvio para esse recurso, incluindo os valores de propriedade esperados e atuais do recurso e quaisquer diferenças entre os dois.

       Para destacar uma diferença, na seção **Differences (Diferenças)**, selecione o nome da propriedade.
       + As propriedades adicionadas são destacadas em verde na coluna **Current (Atuais)** da seção **Details (Detalhes)**.
       + As propriedades excluídas são destacadas em vermelho na coluna **Expected (Esperadas)** da seção **Details (Detalhes)**.
       + As propriedades cujo valor foi alterado são destacadas em amarelo nas colunas **Expected (Esperadas)** e **Current (Atuais)**.  
![\[A seção Status de desvios de recursos da página Detalhes de desvios, que contém as informações de desvio para cada recurso na pilha com suporte para detecção de desvios. Os detalhes incluem o status de desvio e os valores de propriedade esperados e atuais.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**Para detectar desvios em um recurso individual usando o AWS CLI**
+ 
**Importante**  
Consulte o **Horário da última verificação de desvio** do recurso da pilha e confirme se é anterior ao carimbo de data/hora mostrado nos resultados do desvio do recurso para evitar o uso de dados desatualizados.

  Para detectar desvios em um recurso individual usando a AWS CLI, use o comando **detect-stack-resource-drift**. Especifique o ID lógico do recurso, bem como a pilha na qual ele está contido.

  O exemplo a seguir executa uma operação de detecção de desvio em recursos de pilha específicos, `my-drifted-resource`. A resposta retorna informações que confirmam que o recurso foi modificado, incluindo detalhes sobre duas de suas propriedades cujos valores foram alterados.

  ```
  aws cloudformation detect-stack-resource-drift \
      --stack-name my-stack-with-resource-drift \
      --logical-resource-id my-drifted-resource
  ```

  Resultado:

  ```
  {
      "StackResourceDrift": {
          "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
          "ActualProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":120,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":12},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
          "ResourceType": "AWS::SQS::Queue", 
          "Timestamp": "2018-03-26T18:54:28.462Z", 
          "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/099908667365/my-stack-with-resource-drift-Queue-494PBHCO76H4", 
          "StackResourceDriftStatus": "MODIFIED", 
          "ExpectedProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":20,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":10},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
          "PropertyDifferences": [
              {
                  "PropertyPath": "/DelaySeconds", 
                  "ActualValue": "120", 
                  "ExpectedValue": "20", 
                  "DifferenceType": "NOT_EQUAL"
              }, 
              {
                  "PropertyPath": "/RedrivePolicy/maxReceiveCount", 
                  "ActualValue": "12", 
                  "ExpectedValue": "10", 
                  "DifferenceType": "NOT_EQUAL"
              }
          ], 
          "LogicalResourceId": "my-drifted-resource"
      }
  }
  ```

# Resolver o desvio com uma operação de importação
<a name="resource-import-resolve-drift"></a>

Pode haver casos em que a configuração de um recurso tenha se desviado da configuração pretendida e você queira aceitar a nova configuração como a configuração pretendida. Na maioria dos casos, você resolveria os resultados do desvio atualizando a definição de recurso no modelo de pilha com uma nova configuração e, depois, executaria uma atualização de pilha. No entanto, se a nova configuração atualizar uma propriedade de recurso que exija substituição, o recurso será recriado durante a atualização da pilha. Se desejar reter o recurso existente, você poderá usar a importação de recursos para atualizar o recurso e resolver os resultados de desvio sem substituí-lo.

Resolver o desvio de um recurso por meio de uma operação de importação consiste nas seguintes etapas básicas:
+ [Adicione um atributo DeletionPolicy, definido como Retain, ao recurso](#resource-import-resolve-drift-console-step-01-update-stack). Isso garante que o recurso existente seja retido em vez de excluído quando ele é removido da pilha.
+ [Remova o recurso do modelo e execute uma operação de atualização de pilha](#resource-import-resolve-drift-console-step-02-remove-drift). Isso remove o recurso da pilha, mas não o exclui.
+ [Descreva o estado real do recurso no modelo de pilha e, depois, importe o recurso existente de volta para a pilha](#resource-import-resolve-drift-console-step-03-update-template). Isso adiciona o recurso de volta à pilha e resolve as diferenças de propriedade que estavam causando os resultados de desvio.

Para obter mais informações sobre importação de recursos, consulte [Importar recursos da AWS para uma pilha do CloudFormation manualmente](import-resources-manually.md). Para obter uma lista recursos que oferecem suporte à importação, consulte [Suporte a tipos de recursos](resource-import-supported-resources.md).

Neste exemplo, usamos o seguinte modelo, chamado `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
```

------

Neste exemplo, vamos supor que um usuário alterou um recurso fora do CloudFormation. Depois de executar a detecção de desvios, descobrimos que `GamesTable` foi modificado `BillingMode` para `PAY_PER_REQUEST`. Para obter mais informações sobre a detecção de desvios, consulte [Detectar alterações de configuração não gerenciadas em pilhas e recursos com detecção de desvios](using-cfn-stack-drift.md).

![\[Os resultados de desvio exibem os resultados esperados e reais no console.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/drift-results-gamestable.png)


Nossa pilha agora está desatualizada, nossos recursos estão ativos, mas queremos preservar a configuração de recursos pretendida. Podemos fazer isso resolvendo o desvio com uma operação de importação, sem interromper os serviços.

## Resolver desvio com uma operação de importação usando o console do CloudFormation
<a name="resource-import-resolve-drift-console"></a>

### Etapa 1. Atualizar pilha com a política de exclusão Retain
<a name="resource-import-resolve-drift-console-step-01-update-stack"></a>

**Para atualizar a pilha usando um atributo `DeletionPolicy` com a opção `Retain`**

1. Faça login no Console de gerenciamento da AWS e abra o console CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na página **Pilhas** escolha a pilha com desvio.

1. Escolha **Atualizar**, e, depois, selecione **Substituir modelo atual** no painel de detalhes da pilha.

1. Na página **Especificar modelo** forneça o modelo atualizado que contém o atributo `DeletionPolicy` com a opção `Retain` usando um dos seguintes métodos:
   + Escolha **Amazon S3 URL (URL do Amazon S3)** e especifique o URL do modelo na caixa de texto.
   + Escolha **Upload a template file (Fazer upload de um arquivo de modelo)** e procure o arquivo de modelo.

   Em seguida, escolha **Próximo**.

1. Revise a página **Especificar detalhes da pilha** e escolha **Próximo**.

1. Revise a página **Configurar opções de pilha** e escolha **Próximo**.

1. Na página **Revisar *nome da pilha***, escolha **Atualizar pilha**.

*Resultados*: na página **Eventos** da sua pilha, o status é `UPDATE_COMPLETE`.

Para resolver o desvio com uma operação de importação, sem interromper os serviços, especifique uma `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) para os recursos que você deseja remover da pilha. Neste exemplo, adicionamos um atributo [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) definido como `Retain`, ao 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
```

------

### Etapa 2. Remover recursos com desvio, parâmetros relacionados e saídas
<a name="resource-import-resolve-drift-console-step-02-remove-drift"></a>

**Como remover recursos com desvio, parâmetros relacionados e saídas**

1. Escolha **Atualizar**, e, depois, selecione **Substituir modelo atual** no painel de detalhes da pilha.

1. Na página **Especificar modelo**, forneça ao modelo atualizado seus recursos, parâmetros relacionados e saídas removidas do modelo de pilha usando um dos seguintes métodos:
   + Escolha **Amazon S3 URL (URL do Amazon S3)** e especifique o URL do modelo na caixa de texto.
   + Escolha **Upload a template file (Fazer upload de um arquivo de modelo)** e procure o arquivo de modelo.

   Em seguida, escolha **Próximo**.

1. Revise a página **Especificar detalhes da pilha** e escolha **Próximo**.

1. Revise a página **Configurar opções de pilha** e escolha **Próximo**.

1. Na página **Revisar *nome da pilha***, escolha **Atualizar pilha**.

*Resultados*: o **ID Lógico** `GamesTable` tem o status `DELETE_SKIPPED` na página **Eventos** da sua pilha.

Aguarde até que o CloudFormation conclua a operação de atualização da pilha. Após a conclusão da operação de atualização da pilha, remova o recurso, os parâmetros relacionados e as saídas do modelo de pilha. Depois, importe o modelo atualizado. Depois de concluir essas ações, o modelo demonstrativo agora se parece com o seguinte.

------
#### [ 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
```

------

### Etapa 3. Atualizar modelo para corresponder ao estado ativo dos seus recursos
<a name="resource-import-resolve-drift-console-step-03-update-template"></a>

**Como atualizar o modelo para corresponder ao estado ativo dos recursos**

1. Para importar o modelo atualizado, escolha **Ações da pilha** e, depois, escolha **Importar recursos para a pilha**.  
![\[A opção Importar recursos para a pilha no console.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/stack-actions-import.png)

1. Leia a página **Visão geral da importação** para obter uma lista de itens a serem fornecidos durante esta operação, e, depois, escolha **Próximo**.

1. Na página**Especificar modelo**, forneça o modelo atualizado usando um dos seguintes métodos:
   + Escolha **Amazon S3 URL (URL do Amazon S3)** e especifique o URL do modelo na caixa de texto.
   + Escolha **Upload a template file (Fazer upload de um arquivo de modelo)** e procure o arquivo de modelo.

   Em seguida, escolha **Próximo**.

1. Na página **Identify resources (Identificar recursos)**, identifique todos os recursos de destino. Para obter mais informações, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

   1. Em **Identifier property (Propriedade do identificador)**, escolha o tipo de identificador do recurso. Por exemplo, a propriedade `TableName` identifica o recurso `AWS::DynamoDB::Table`.

   1. Em **Valor do identificador**, digite o valor real da propriedade. No modelo demonstrativo, o `TableName` para o recurso `GamesTable` é `Games`.

   1. Escolha **Próximo**.

1. Revise a página **Especificar detalhes da pilha** e escolha **Próximo**.

1. Na página **Visão geral da importação**, revise os recursos que estão sendo importados e escolha **Importar recursos**. Isso importará o tipo de recurso `AWS::DynamoDB::Table` de volta para sua pilha.

*Resultados*: neste exemplo, resolvemos o desvio de recursos com uma operação de importação, sem interromper os serviços. É possível verificar o andamento de uma ação de importação no console do CloudFormation na guia Eventos. Os recursos importados terão o status `IMPORT_COMPLETE` seguido pelo status `CREATE_COMPLETE` com **Importação de recursos concluída** como o motivo do status.

Aguarde até que o CloudFormation conclua a operação de atualização da pilha. Depois que a operação de atualização da pilha for concluída, atualize seu modelo para corresponder ao estado real e com desvio de seus recursos. Por exemplo, o `BillingMode` será definido como `PAY_PER_REQUEST` e `ReadCapacityUnits` e `WriteCapacityUnits` serão definidos como `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
```

------