

# Criar um modelo do CloudFormation a partir de recursos verificados com o gerador de IaC
<a name="iac-generator-create-template-from-scanned-resources"></a>

Este tópico explica como criar um modelo a partir de recursos que foram verificados pelo recurso de gerador de IaC. 

## Criar um modelo com base nos recursos verificados (console)
<a name="create-template-from-scanned-resources-console"></a>

**Para criar um modelo de pilha com recursos verificados**

1. Abra a [página do gerador de IaC](https://console.aws.amazon.com/cloudformation/home?#iac-generator) do console do CloudFormation.

1. Na barra de navegação na parte superior da tela, escolha a Região da AWS que contém os recursos verificados.

1. No painel **Modelos**, escolha **Criar modelo**. 

1. Selecione **Iniciar de um novo modelo**.

   1. Em **Nome do modelo**, forneça um nome para o modelo.

   1. (Opcional) Configure sua **Política de exclusão** e a **Política de substituição de atualização**.

   1. Escolha **Próximo** para adicionar recursos encontrados pela varredura ao modelo.

1. Em **Adicionar recursos verificados**, navegue pela lista de recursos verificados e selecione os recursos que deseja adicionar ao modelo. É possível filtrar os recursos por identificador, tipo de recurso ou tags. Os filtros são mutuamente inclusivos.

1. Após adicionar todos os recursos necessários para o modelo, escolha **Próximo** para sair da página **Adicionar recursos verificados** e prossiga para a página **Adicionar recursos relacionados**.

1. Revise uma lista recomendada de recursos relacionados. Recursos relacionados, como instâncias do Amazon EC2 e grupos de segurança, são interdependentes e normalmente pertencem à mesma workload. Selecione os usuários relacionados que deseja incluir no modelo gerado.
**nota**  
Sugerimos adicionar todos os recursos relacionados a esse modelo.

1. Revise os detalhes do modelo, recursos encontrados pela varredura e recursos relacionados. 

1. Escolha **Criar modelo** para sair da página **Revisar e criar** e criar o modelo.

## Criar um modelo com base nos recursos verificados (AWS CLI)
<a name="create-template-from-scanned-resources-cli"></a>

**Para criar um modelo de pilha com recursos verificados**

1. Use o comando [list-resource-scan-resources](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-resource-scan-resources.html) para listar os recursos encontrados pela verificação, especificando a opção `--resource-identifier` para limitar a saída, se assim desejar. Na opção `--resource-scan-id`, substitua o ARN de amostra pelo ARN real.

   ```
   aws cloudformation list-resource-scan-resources \
     --resource-scan-id arn:aws:cloudformation:us-east-1:123456789012:resourceScan/0a699f15-489c-43ca-a3ef-3e6ecfa5da60 \
     --resource-identifier MyApp
   ```

   Este é um exemplo de resposta, onde `ManagedByStack` indica se o CloudFormation já está gerenciando o recurso. Copie a saída. Você precisa dele para a próxima etapa.

   ```
   {
       "Resources": [
           {
               "ResourceType": "AWS::EKS::Cluster",
               "ResourceIdentifier": {
                   "ClusterName": "MyAppClusterName"
               },
               "ManagedByStack": false
           },
           {
               "ResourceType": "AWS::AutoScaling::AutoScalingGroup",
               "ResourceIdentifier": {
                   "AutoScalingGroupName": "MyAppASGName"
               },
               "ManagedByStack": false
           }
       ]
   }
   ```

   Consulte uma descrição dos campos na saída em [ScannedResource](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ScannedResource.html) na *Referência de API do AWS CloudFormation*.

1. Use o comando `cat` para armazenar os tipos e identificadores de recursos em um arquivo JSON chamado `resources.json` em seu diretório inicial. O exemplo a seguir é um JSON baseado na saída do exemplo da etapa anterior.

   ```
   $ cat > resources.json
   [
       {
           "ResourceType": "AWS::EKS::Cluster",
           "ResourceIdentifier": {
               "ClusterName": "MyAppClusterName"
           }
       },
       {
           "ResourceType": "AWS::AutoScaling::AutoScalingGroup",
           "ResourceIdentifier": {
               "AutoScalingGroupName": "MyAppASGName"
           }
       }
   ]
   ```

1. Use o comando [list-resource-scan-related-resources](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-resource-scan-related-resources.html), juntamente com o arquivo `resources.json` que você criou, para listar os recursos relacionados aos recursos verificados.

   ```
   aws cloudformation list-resource-scan-related-resources \
     --resource-scan-id arn:aws:cloudformation:us-east-1:123456789012:resourceScan/0a699f15-489c-43ca-a3ef-3e6ecfa5da60 \
     --resources file://resources.json
   ```

   Este é um exemplo de resposta, onde `ManagedByStack` indica se o CloudFormation já está gerenciando o recurso. Adicione esses recursos ao arquivo JSON criado na etapa anterior. Ele será necessário para criar o modelo.

   ```
   {
       "RelatedResources": [
           {
               "ResourceType": "AWS::EKS::Nodegroup",
               "ResourceIdentifier": {
                   "NodegroupName": "MyAppNodegroupName"
               },
               "ManagedByStack": false
           },
           {
               "ResourceType": "AWS::IAM::Role",
               "ResourceIdentifier": {
                   "RoleId": "arn:aws::iam::account-id:role/MyAppIAMRole"
               },
               "ManagedByStack": false
           }
       ]
   }
   ```

   Consulte uma descrição dos campos na saída em [ScannedResource](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ScannedResource.html) na *Referência de API do AWS CloudFormation*.
**nota**  
A lista de entrada de recursos não pode exceder um tamanho de 100. Para listar recursos relacionados para mais de 100 recursos, execute o comando **list-resource-scan-related-resources** em lotes de 100 e consolide os resultados.  
Tenha em mente que a saída pode conter recursos duplicados na lista.

1. Use o comando [create-generated-template](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-generated-template.html) para criar um novo modelo de pilha da seguinte forma, com as seguintes modificações:
   + Substitua `us-east-1` pelo Região da AWS que contém os recursos verificados.
   + Substitua `MyTemplate` pelo nome do modelo a ser criado.

   ```
   aws cloudformation create-generated-template --region us-east-1 \
    --generated-template-name MyTemplate \
     --resources file://resources.json
   ```

   Veja a seguir um exemplo de arquivo `resources.json`.

   ```
   [
       {
           "ResourceType": "AWS::EKS::Cluster",
           "LogicalResourceId":"MyCluster",
           "ResourceIdentifier": {
               "ClusterName": "MyAppClusterName"
           }
       },
       {
           "ResourceType": "AWS::AutoScaling::AutoScalingGroup",
           "LogicalResourceId":"MyASG",
           "ResourceIdentifier": {
               "AutoScalingGroupName": "MyAppASGName"
           }
       },
       {
           "ResourceType": "AWS::EKS::Nodegroup",
           "LogicalResourceId":"MyNodegroup",
           "ResourceIdentifier": {
               "NodegroupName": "MyAppNodegroupName"
           }
       },
       {
           "ResourceType": "AWS::IAM::Role",
           "LogicalResourceId":"MyRole",
           "ResourceIdentifier": {
               "RoleId": "arn:aws::iam::account-id:role/MyAppIAMRole"
           }
       }
   ]
   ```

   Em caso de êxito, o comando retornará a resposta a seguir.

   ```
   {
     "Arn":
       "arn:aws:cloudformation:region:account-id:generatedtemplate/7fc8512c-d8cb-4e02-b266-d39c48344e48",
     "Name": "MyTemplate"
   }
   ```