

# Criar uma pilha com recursos existentes
<a name="resource-import-new-stack"></a>

Este tópico mostra como criar uma pilha a partir dos recursos da AWS existentes 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 descreve todos os recursos que você deseja em uma nova pilha. Salve o modelo do localmente ou em um bucket do Amazon S3. 
+ 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-new-stack-example-template)
+ [Criar uma pilha com recursos existentes usando a Console de gerenciamento da AWS](#resource-import-new-stack-console)
+ [Criar uma pilha com recursos existentes usando a AWS CLI](#resource-import-new-stack-cli)

## Exemplo de modelo
<a name="resource-import-new-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 que foram criadas fora do CloudFormation. A `ServiceTable` e a `GamesTable` são os destinos de importação. 

**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",
            "DeletionPolicy": "Retain",
            "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
                }
            }
        }
    }
}
```

## Criar uma pilha com recursos existentes usando a Console de gerenciamento da AWS
<a name="resource-import-new-stack-console"></a>

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 **Create stack (Criar pilha)** e **With existing resources (import resources) (Com recursos existentes (importar recursos))**.  
![\[A opção Criar pilha com recursos existentes no console.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/create-stack-with-existing-resources.png)

1. Leia a página **Import overview (Visão geral da importação)** para obter uma lista de itens que você deve fornecer durante esta operação. Em seguida, escolha **Próximo**.

1. Na página **Specify template (Especificar modelo)**, forneça o modelo 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)**, modifique os parâmetros e escolha **Next (Próximo)**. Isso cria automaticamente um conjunto de alterações.
**Importante**  
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), confirme se os recursos corretos estão sendo importados e escolha **Import resources** (Importar recursos). Isso executa automaticamente o conjunto de alterações criado na última etapa.

   O painel **Events (Eventos)** da página **Stack details (Detalhes da pilha)** da nova pilha é exibido.  
![\[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. Nesta demonstração, corrigimos as configurações do modelo para corresponder às configurações reais.

   1. [Reverter a operação de importação](resource-import-revert.md#resource-import-revert-console) para os recursos afetados.

   1. Adicione os destinos de importação ao modelo novamente, garantindo que as configurações do modelo correspondam às configurações atuais.

   1. Repita as etapas de 2 a 8 usando o modelo modificado para importar os recursos novamente.

## Criar uma pilha com recursos existentes usando a AWS CLI
<a name="resource-import-new-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 do seu modelo e os identificadores exclusivos no formato de string JSON apresentado a seguir.

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

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

   Por exemplo, para importar `ServiceTable` e `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"
         }
      },
      {
         "ResourceType":"AWS::DynamoDB::Table",
         "LogicalResourceId":"ServiceTable",
         "ResourceIdentifier":{
            "TableName":"Service"
         }
      }
   ]
   ```

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"}},{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"ServiceTable","ResourceIdentifier":{"TableName":"Service"}}]'
   ```
**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. 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 desvios em recursos de pilha individuais](detect-drift-resource.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. Nesta demonstração, corrigimos as configurações do modelo para corresponder às configurações reais.

   1. [Reverter a operação de importação](resource-import-revert.md#resource-import-revert-cli) para os recursos afetados.

   1. Adicione os destinos de importação ao modelo novamente, garantindo que as configurações do modelo correspondam às configurações atuais.

   1. Repita as etapas de 3 a 6 usando o modelo modificado para importar os recursos novamente.