

# Importar recursos existentes para uma pilha
<a name="resource-import-existing-stack"></a>

Este tópico mostra como importar recursos existentes da AWS para uma pilha existente, descrevendo-os em um modelo. Para, em vez disso, verificar os recursos existentes e gerar automaticamente um modelo que você possa usar para importar recursos existentes para o CloudFormation ou replicar os recursos em uma nova conta, consulte [Gerar modelos a partir de recursos existentes com o gerador de IaC](generate-IaC.md).

**Pré-requisitos**

Antes de começar, você deve ter o seguinte:
+ Um modelo que descreva toda a pilha, incluindo tanto os recursos que já fazem parte da pilha quanto os recursos a serem importados. Salve o modelo do localmente ou em um bucket do Amazon S3. 

  **Para obter uma cópia de um modelo de pilha em execução**

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

  1. Na lista de pilhas, escolha a pilha da qual deseja recuperar o modelo.

  1. No painel de detalhes da pilha, escolha a guia **Modelo** e escolha **Copiar para a área de transferência**.

  1. Cole o código em um editor de texto para começar a adicionar outros recursos ao modelo.
+ Para cada recurso que você desejar importar, inclua o seguinte:
  + as propriedades e os valores das propriedades que definem a configuração atual do recurso.
  + o identificador exclusivo do recurso, como seu nome. Para obter mais informações, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).
  + o [atributos DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html).

**Topics**
+ [Exemplo de modelo](#resource-import-existing-stack-example-template)
+ [Importar um recurso existente para a pilha usando a Console de gerenciamento da AWS](#resource-import-existing-stack-console)
+ [Importar um recurso existente para a pilha usando a AWS CLI](#resource-import-existing-stack-cli)

## Exemplo de modelo
<a name="resource-import-existing-stack-example-template"></a>

Nesta demonstração, partimos do pressuposto de que você esteja usando o exemplo de modelo a seguir, denominado `TemplateToImport.json`, que especifica duas tabelas do DynamoDB. A `ServiceTable` faz parte da pilha atualmente e a `GamesTable` é a tabela que você deseja importar.

**nota**  
Este modelo serve apenas de exemplo. Para usá-lo em seus próprios testes, substitua os recursos do exemplo por recursos da sua conta. 

```
{
    "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"
                    }
                ],
                "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"
                    }
                ],
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 1
                }
            }
        }
    }
}
```

## Importar um recurso existente para a pilha usando a Console de gerenciamento da AWS
<a name="resource-import-existing-stack-console"></a>

**nota**  
O console do CloudFormation não oferece suporte ao uso da função intrínseca `Fn::Transform` ao importar recursos. É possível usar o AWS CLI para importar recursos que usem a função `Fn::Transform`.

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 **Stacks (Pilhas)**, escolha a pilha para a qual deseja importar os recursos.

1. Escolha **Stack actions (Ações da pilha)** e **Import resources into stack (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. Consulte a página **Import overview (Visão geral da importação)** e escolha **Next (Próximo)**.

1. Na página**Specify template (Especificar modelo)**, forneça o modelo atualizado usando um dos métodos a seguir e escolha **Next (Próximo)**.
   + 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.

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, o recurso `AWS::DynamoDB::Table` pode ser identificado usando a propriedade `TableName`.

   1. Em **Identifier value (Valor do identificador)**, digite o valor real da propriedade. Por exemplo, o `TableName` para o recurso `GamesTable` no modelo de exemplo é `Games`.

   1. Escolha **Próximo**.

1. Na página **Specify stack details (Especificar detalhes da pilha)**, atualize os parâmetros e escolha **Next (Próximo)**. Isso cria automaticamente um conjunto de alterações.
**nota**  
A operação de importação falhará se você modificar os parâmetros existentes que iniciam uma operação de criação, atualização ou exclusão.

1. Na página **Review *stack-name*** (Revisar nome-pilha), revise os recursos a serem importados e escolha **Import resources** (Importar recursos). Isso executa automaticamente o conjunto de alterações criado na última etapa. As tags no nível da pilha são aplicadas aos recursos importados no momento. Para obter mais informações, consulte [Configurar opções da pilha](cfn-console-create-stack.md#configure-stack-options).

   A página **Events** (Eventos) da pilha é exibida.  
![\[A guia Eventos no console.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/import-events.png)

1. (Opcional) Execute a detecção de desvios na pilha para garantir que o modelo e a configuração real dos recursos importados sejam correspondentes. Para obter mais informações sobre como detectar desvios, consulte [Detectar desvio em uma pilha inteira do CloudFormation](detect-drift-stack.md).

1. (Opcional) Se os recursos importados não corresponderem às configurações de modelo esperadas, corrija as configurações do modelo ou atualize diretamente os recursos. Para obter mais informações sobre como importar recursos com desvio, consulte [Resolver o desvio com uma operação de importação](resource-import-resolve-drift.md).

## Importar um recurso existente para a pilha usando a AWS CLI
<a name="resource-import-existing-stack-cli"></a>

1. Para saber quais propriedades identificam cada tipo de recurso no modelo, execute o comando **get-template-summary**, especificando o URL do S3 do modelo. Por exemplo, o recurso `AWS::DynamoDB::Table` pode ser identificado usando a propriedade `TableName`. Para o recurso `GamesTable` no modelo de exemplo, o valor de `TableName` é `Games`. Você precisará dessas informações na próxima etapa.

   ```
   aws cloudformation get-template-summary \
       --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
   ```

   Para obter mais informações, consulte [Identificadores de recursos](import-resources-manually.md#resource-import-identifiers-unique-ids).

1. Componha uma lista com os recursos reais a serem importados e os identificadores exclusivos no formato de string JSON apresentado a seguir.

   ```
   [{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
   ```

   Como alternativa, é possível especificar os parâmetros formatados em JSON em um arquivo de configuração. 

   Por exemplo, para importar `GamesTable`, é possível criar um arquivo *ResourcesToImport.txt* que contém a configuração apresentada a seguir.

   ```
   [
     {
         "ResourceType":"AWS::DynamoDB::Table",
         "LogicalResourceId":"GamesTable",
         "ResourceIdentifier": {
           "TableName":"Games"
         }
     }
   ]
   ```

1. Para criar um conjunto de alterações, use o comando **create-change-set**, apresentado a seguir, e substitua o texto do espaço reservado. Para a opção,`--change-set-type` especifique um valor de **IMPORT**. Para a opção `--resources-to-import`, substitua a string JSON de exemplo pela string JSON real que você acabou de criar.

   ```
   aws cloudformation create-change-set \
       --stack-name TargetStack --change-set-name ImportChangeSet \
       --change-set-type IMPORT \
       --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json \
       --resources-to-import '[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'
   ```
**nota**  
A opção `--resources-to-import` não oferece suporte para a linguagem YAML incorporada. Os requisitos para usar sequências de escape de aspas em uma string JSON variam de acordo com o terminal utilizado. Para obter mais informações, consulte [Using quotation marks inside strings](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html#cli-usage-parameters-quoting-strings-containing) no *Guia do usuário da AWS Command Line Interface*.

   Como alternativa, é possível usar um URL de arquivo como entrada para a opção `--resources-to-import`, conforme mostrado no exemplo a seguir.

   ```
   --resources-to-import file://ResourcesToImport.txt
   ```

1. Revise o conjunto de alterações para garantir que os recursos corretos sejam importados.

   ```
   aws cloudformation describe-change-set \
       --change-set-name ImportChangeSet --stack-name TargetStack
   ```

1. Para iniciar o conjunto de alterações e importar os recursos, use o comando **execute-change-set**, apresentado a seguir, e substitua o texto do espaço reservado. As tags no nível da pilha são aplicadas aos recursos importados no momento. Para obter mais informações, consulte [Configurar opções da pilha](cfn-console-create-stack.md#configure-stack-options). Após a conclusão bem-sucedida da operação `(IMPORT_COMPLETE)`, os recursos são importados com êxito.

   ```
   aws cloudformation execute-change-set \
       --change-set-name ImportChangeSet --stack-name TargetStack
   ```

1. (Opcional) Execute a detecção de desvios na pilha `IMPORT_COMPLETE` para garantir que o modelo e a configuração real dos recursos importados sejam correspondentes. Para obter mais informações sobre como detectar desvios, consulte [Detectar desvio em uma pilha inteira do CloudFormation](detect-drift-stack.md).

   1. Execute a detecção de desvio na pilha especificada.

      ```
      aws cloudformation detect-stack-drift --stack-name TargetStack
      ```

      Se a detecção ocorrer com êxito, esse comando retornará o exemplo de saída apresentado a seguir.

      ```
      { "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
      ```

   1. Visualize o progresso de uma operação de detecção de desvio para o ID de detecção de desvio de pilha especificado.

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

   1. Visualize as informações de desvio para os recursos que foram verificados em busca de desvios na pilha especificada.

      ```
      aws cloudformation describe-stack-resource-drifts --stack-name TargetStack
      ```

1. (Opcional) Se os recursos importados não corresponderem às configurações de modelo esperadas, corrija as configurações do modelo ou atualize diretamente os recursos. Para obter mais informações sobre como importar recursos com desvio, consulte [Resolver o desvio com uma operação de importação](resource-import-resolve-drift.md).