

# Creación de una plantilla de CloudFormation a partir de recursos escaneados con el generador de IaC
<a name="iac-generator-create-template-from-scanned-resources"></a>

En este tema se explica cómo crear una plantilla a partir de los recursos escaneados con la característica de generación de IaC. 

## Creación de una plantilla a partir de recursos escaneados (consola)
<a name="create-template-from-scanned-resources-console"></a>

**Creación de una plantilla de pila a partir de recursos escaneados**

1. Abra la [página del generador de IaC](https://console.aws.amazon.com/cloudformation/home?#iac-generator) de la consola de CloudFormation.

1. En la barra de navegación de la parte superior de la pantalla, elija la Región de AWS que contenga los recursos escaneados.

1. En la sección **Plantillas**, elija **Crear plantilla**. 

1. Elija **Empezar desde una plantilla nueva**.

   1. En **Nombre de plantilla**, proporcione un nombre para la plantilla.

   1. (Opcional) Configure la **Política de eliminación** y **Actualice la política de reemplazo**.

   1. Seleccione **Siguiente** para añadir los recursos escaneados a la plantilla.

1. En **Agregar recursos analizados**, navegue por la lista de recursos escaneados y seleccione los recursos que desee agregar a la plantilla. Puede filtrar los recursos por identificador de recurso, tipo de recurso o etiquetas. Los filtros se incluyen entre sí.

1. Cuando haya agregado todos los recursos necesarios a la plantilla, elija **Siguiente** para salir de la página **Agregar recursos analizados** y pasar a la página **Agregar recursos relacionados**.

1. Revise una lista recomendada de recursos relacionados. Los recursos relacionados, como las instancias de Amazon EC2 y los grupos de seguridad, son interdependientes y, por lo general, pertenecen a la misma carga de trabajo. Seleccione los recursos relacionados que desee incluir en la plantilla de generada.
**nota**  
Le sugerimos que añada todos los recursos relacionados a esta plantilla.

1. Revise los detalles de la plantilla, los recursos escaneados y los recursos relacionados. 

1. Seleccione **Crear plantilla** para salir de la página **Revisar y crear** y crear la plantilla.

## Creación de una plantilla a partir de recursos escaneados (AWS CLI)
<a name="create-template-from-scanned-resources-cli"></a>

**Creación de una plantilla de pila a partir de recursos escaneados**

1. Para enumerar los recursos encontrados durante el escaneo, use el comando [list-resource-scan-resources](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-resource-scan-resources.html) y, si lo desea, especifique la opción `--resource-identifier` para limitar las salidas. Para la opción `--resource-scan-id`, reemplace el ARN de muestra por el 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}}
   ```

   A continuación, se muestra una respuesta de ejemplo, en la que `ManagedByStack` indica si CloudFormation ya administra el recurso. Copie la salida. Lo necesita para el siguiente paso.

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

   Para obtener una descripción de los campos de la salida, consulte [ScannedResource](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ScannedResource.html) en la *Referencia de la API de AWS CloudFormation*.

1. Use el comando `cat` para almacenar los tipos de recursos y los identificadores en un archivo JSON con el nombre `resources.json` en su directorio principal. El siguiente es un JSON de ejemplo que se basa en la salida del ejemplo del paso anterior.

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

1. Para enumerar los recursos encontrados durante el escaneo, use el comando [list-resource-scan-related-resources](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-resource-scan-related-resources.html), junto con el archivo `resources.json` que creó.

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

   A continuación, se muestra una respuesta de ejemplo, en la que `ManagedByStack` indica si CloudFormation ya administra el recurso. Agregue estos recursos al archivo JSON que creó en el paso anterior. Lo necesitará para crear la plantilla.

   ```
   {
       "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
           }
       ]
   }
   ```

   Para obtener una descripción de los campos de la salida, consulte [ScannedResource](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ScannedResource.html) en la *Referencia de la API de AWS CloudFormation*.
**nota**  
La lista de recursos de entrada no puede superar una longitud de 100. Para enumerar los recursos relacionados de más de 100 recursos, ejecute el comando **list-resource-scan-related-resources** en lotes de 100 y consolide los resultados.  
Tenga en cuenta que el resultado puede contener recursos duplicados en la lista.

1. Para crear una plantilla de pila nueva, use el comando [create-generated-template](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-generated-template.html) como se muestra a continuación y con estas modificaciones:
   + Sustituya `{{us-east-1}}` por la Región de AWS que contenga los recursos escaneados.
   + Sustituya `{{MyTemplate}}` por el nombre de la plantilla a crear.

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

   A continuación se muestra un ejemplo de un archivo `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"
           }
       }
   ]
   ```

   Si se ejecuta correctamente, este comando devuelve lo siguiente.

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