

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

------