

# Aninhar uma pilha existente
<a name="resource-import-nested-stacks"></a>

Use o recurso `resource import` para aninhar uma pilha existente em outra pilha existente. As pilhas aninhadas são componentes comuns que você declara e às quais faz referência a partir de outros modelos. Dessa forma, você pode evitar copiar e colar as mesmas configurações nos modelos e simplificar as atualizações de pilha. Se tiver um modelo para um componente comum, você poderá usar o recurso `AWS::CloudFormation::Stack` para fazer referência a este modelo a partir de outro modelo. Para saber mais sobre pilhas aninhadas, consulte [Dividir um modelo em partes reutilizáveis usando pilhas aninhadas](using-cfn-nested-stacks.md).

CloudFormation O oferece suporte a apenas um nível de aninhamento usando `resource import`. Isso significa que você não pode importar uma pilha em uma pilha filho ou importar uma pilha com filhos.

Se você não tiver familiaridade com a importação, recomendamos que primeiro revise as informações introdutórias no tópico [Importar recursos da AWS para uma pilha do CloudFormation manualmente](import-resources-manually.md).

## Validação da importação da pilha aninhada
<a name="resource-import-nested-stacks-validation"></a>

Durante uma operação de importação de pilha aninhada, o CloudFormation realiza as validações a seguir.
+ A definição aninhada de `AWS::CloudFormation::Stack` no modelo de pilha pai corresponde ao modelo da pilha real aninhada.
+ As tags da definição aninhada de `AWS::CloudFormation::Stack` no modelo de pilha pai correspondem às tags do recurso de pilha real aninhada.

## Aninhar uma pilha existente usando o . Console de gerenciamento da AWS
<a name="resource-import-nested-stacks-console"></a>

1. Adicione o recurso `AWS::CloudFormation::Stack` ao modelo de pilha pai com uma [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) `Retain`. No modelo de exemplo de pilha principal, apresentado a seguir, `MyNestedStack` corresponde ao destino da importação.

   **JSON**

   ```
   {
     "AWSTemplateFormatVersion" : "2010-09-09",
     "Resources" : {
       "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
       "MyNestedStack" : {
         "Type" : "AWS::CloudFormation::Stack",
         "DeletionPolicy": "Retain",
         "Properties" : {
         "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template",
           "Parameters" : {
             "InstanceType" : "t1.micro",
             "KeyName" : "mykey"
           }
         }
       }
     }
   }
   ```

   **YAML**

   ```
   AWSTemplateFormatVersion: 2010-09-09
   Resources:
     ServiceTable:
       Type: AWS::DynamoDB::Table
       Properties:
         TableName: Service
         AttributeDefinitions:
           - AttributeName: key
             AttributeType: S
         KeySchema:
           - AttributeName: key
             KeyType: HASH
         ProvisionedThroughput:
           ReadCapacityUnits: 5
           WriteCapacityUnits: 1
     MyNestedStack:
       Type: AWS::CloudFormation::Stack
       DeletionPolicy: Retain
       Properties:
         TemplateURL: >-
           https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template
         Parameters:
           InstanceType: t1.micro
           KeyName: mykey
   ```

1. Abra o CloudFormation Console.

1. Na página **Stacks (Pilhas)**, com a pilha pai selecionada, 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. 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 pai 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 o recurso `AWS::CloudFormation::Stack`.

   1. Em **Identifier property (Propriedade do identificador)**, escolha o tipo de identificador do recurso. Por exemplo, um recurso `AWS::CloudFormation::Stack` pode ser identificado usando a propriedade `StackId`.

   1. Em **Valor do identificador**, digite o ARN da pilha que você está importando. Por exemplo, `arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10`.  
![\[A página Identificar recursos no console.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/resource-import-stackid.png)

   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 **Analisar *MyParentStack***, confirme se o recurso correto está sendo importado e, em seguida, escolha **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.

1. O painel **Events (Eventos)** da página **Stack details (Detalhes da pilha)** de sua pilha pai será exibido.  
![\[A guia Eventos no console.\]](http://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/images/import-events.png)
**nota**  
Não é necessário executar a detecção de desvios na pilha pai após a operação de importação porque o recurso `AWS::CloudFormation::Stack` já foi gerenciado pelo CloudFormation.

## Aninhar uma pilha existente usando o . AWS CLI
<a name="resource-import-nested-stacks-cli"></a>

1. Adicione o recurso `AWS::CloudFormation::Stack` ao modelo de pilha pai com uma [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html) `Retain`. No modelo pai do exemplo a seguir, `MyNestedStack` é o destino da importação.

   **JSON**

   ```
   {
     "AWSTemplateFormatVersion" : "2010-09-09",
     "Resources" : {
       "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
       "MyNestedStack" : {
         "Type" : "AWS::CloudFormation::Stack",
         "DeletionPolicy": "Retain",
         "Properties" : {
         "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template",
           "Parameters" : {
             "InstanceType" : "t1.micro",
             "KeyName" : "mykey"
           }
         }
       }
     }
   }
   ```

   **YAML**

   ```
   AWSTemplateFormatVersion: 2010-09-09
   Resources:
     ServiceTable:
       Type: AWS::DynamoDB::Table
       Properties:
         TableName: Service
         AttributeDefinitions:
           - AttributeName: key
             AttributeType: S
         KeySchema:
           - AttributeName: key
             KeyType: HASH
         ProvisionedThroughput:
           ReadCapacityUnits: 5
           WriteCapacityUnits: 1
     MyNestedStack:
       Type: AWS::CloudFormation::Stack
       DeletionPolicy: Retain
       Properties:
         TemplateURL: >-
           https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template
         Parameters:
           InstanceType: t1.micro
           KeyName: mykey
   ```

1. Componha uma string JSON, conforme mostrado no exemplo a seguir, com estas modificações: 
   + Substitua *MyNestedStack* pelo ID lógico do recurso de destino, conforme especificado no modelo.
   + Substitua *arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10* pelo ARN da pilha que você deseja importar.

   ```
   [{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]
   ```

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

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

   **JSON**

   ```
   [
     {
         "ResourceType":"AWS::CloudFormation::Stack",
         "LogicalResourceId":"MyNestedStack",
         "ResourceIdentifier": {
           "StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"
         }
     }
   ]
   ```

   **YAML**

   ```
   ResourceType: AWS::CloudFormation::Stack
     LogicalResourceId: MyNestedStack
     ResourceIdentifier:
       StackId: >-
         arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
   ```

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 MyParentStack --change-set-name ImportChangeSet \
       --change-set-type IMPORT \
       --template-body file://TemplateToImport.json \
       --resources-to-import '[{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]'
   ```
**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
   ```

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

   ```
   {
       "Id": "arn:aws:cloudformation:us-west-2:12345678910:changeSet/ImportChangeSet/8ad75b3f-665f-46f6-a200-0b4727a9442e",
       "StackId": "arn:aws:cloudformation:us-west-2:12345678910:stack/MyParentStack/4e345b70-1281-11ef-b027-027366d8e82b"
   }
   ```

1. Revise o conjunto de alterações para garantir que a pilha correta está sendo importada.

   ```
   aws cloudformation describe-change-set --change-set-name ImportChangeSet
   ```

1. Para iniciar o conjunto de alterações e importar a pilha para a pilha principal de origem, use o comando **execute-change-set**, apresentado a seguir, e substitua o texto do espaço reservado. As [tags no nível da pilha](cfn-console-create-stack.md#configure-stack-options) são aplicadas aos recursos importados no momento. Após concluir a operação de importação `(IMPORT_COMPLETE)`, a pilha será aninhada com êxito.

   ```
   aws cloudformation execute-change-set --change-set-name ImportChangeSet
   ```
**nota**  
Não é necessário executar a detecção de desvio na pilha pai após essa operação de importação, pois o recurso `AWS::CloudFormation::Stack` já é gerenciado pelo CloudFormation.