

# Formato de plantilla de CloudFormation
<a name="template-formats"></a>

Puede crear plantillas de CloudFormation en formatos JSON o YAML. Ambos formatos tienen el mismo propósito, pero ofrecen claras ventajas en términos de legibilidad y complejidad.
+ **JSON**: JSON es un formato de intercambio de datos ligero que las máquinas pueden analizar y generar fácilmente. Sin embargo, leer y escribir puede ser engorroso para los humanos, en especial en configuraciones complejas. En JSON, la plantilla se estructura mediante llaves `{}` y corchetes `[]` anidados para definir los recursos, los parámetros y otros componentes. Su sintaxis requiere una declaración explícita de cada elemento, lo que puede hacer que la plantilla sea más detallada, pero garantiza el cumplimiento estricto de un formato estructurado. 
+ **YAML**: YAML está diseñado para ser más legible y menos detallado que JSON. Usa indentación en lugar de llaves y corchetes para indicar el anidamiento, lo que puede facilitar la visualización de la jerarquía de recursos y parámetros. A menudo se prefiere YAML por su claridad y facilidad de uso, en especial cuando se trata de plantillas más complejas. Sin embargo, el hecho de que YAML dependa de la indentación puede provocar errores si el espaciado no es uniforme, lo que requiere una atención cuidadosa para mantener la precisión.

## Estructura de la plantilla
<a name="template-structure"></a>

Las plantillas de CloudFormation se dividen en diversas secciones y cada una de ellas está diseñada para contener un tipo específico de información. Algunas secciones deben declararse en un orden específico y, en el caso de otras, el orden no importa. Sin embargo, al crear la plantilla, puede ser útil utilizar el orden lógico del siguiente ejemplo, ya que los valores de una sección podrían estar relacionados con los valores de una sección anterior. 

Al crear plantillas, no use secciones principales duplicadas, por ejemplo, la sección `Resources`. Aunque CloudFormation puede aceptar la plantilla, esta puede tener un comportamiento indefinido al procesarla, lo que podría resultar en el aprovisionamiento incorrecto de recursos o en la devolución de errores inexplicables.

### JSON
<a name="template-structure.json"></a>

En el siguiente ejemplo se muestra la estructura de una plantilla con formato JSON con todas las secciones disponibles.

```
{
  "AWSTemplateFormatVersion" : "version date",

  "Description" : "JSON string",

  "Metadata" : {
    template metadata
  },

  "Parameters" : {
    set of parameters
  },
  
  "Rules" : {
    set of rules
  },

  "Mappings" : {
    set of mappings
  },

  "Conditions" : {
    set of conditions
  },

  "Transform" : {
    set of transforms
  },

  "Resources" : {
    set of resources
  },
  
  "Outputs" : {
    set of outputs
  }
}
```

### YAML
<a name="template-structure.yaml"></a>

En el siguiente ejemplo se muestra la estructura de una plantilla en formato YAML con todas las secciones disponibles.

```
---
AWSTemplateFormatVersion: version date

Description:
  String

Metadata:
  template metadata

Parameters:
  set of parameters

Rules:
  set of rules

Mappings:
  set of mappings

Conditions:
  set of conditions

Transform:
  set of transforms

Resources:
  set of resources

Outputs:
  set of outputs
```

## Comentarios
<a name="template-comments"></a>

En las plantillas con formato JSON, no se admiten comentarios. JSON, por diseño, no incluye una sintaxis para los comentarios, lo que significa que no se pueden agregar comentarios directamente dentro de la estructura de JSON. Sin embargo, si necesita incluir notas explicativas o documentación, puede agregar metadatos. Para obtener más información, consulte [Metadata atributo](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-metadata.html).

En las plantillas con formato YAML, puede incluir comentarios en línea con el símbolo `#`.

El siguiente ejemplo muestra una plantilla YAML con comentarios en línea.

```
AWSTemplateFormatVersion: 2010-09-09
Description: A sample CloudFormation template with YAML comments.
# Resources section
Resources:
  MyEC2Instance: 
    Type: AWS::EC2::Instance
    Properties: 
      # Linux AMI
      ImageId: ami-1234567890abcdef0 
      InstanceType: t2.micro
      KeyName: MyKey
      BlockDeviceMappings:
        - DeviceName: /dev/sdm
          Ebs:
            VolumeType: io1
            Iops: 200
            DeleteOnTermination: false
            VolumeSize: 20
```

## Especificaciones
<a name="template-formats.supported-specifications"></a>

CloudFormation es compatible con las siguientes especificaciones de JSON y YAML:

JSON  
CloudFormation sigue el estándar JSON ECMA-404. Para obtener más información sobre el formato JSON, consulte [http://www.json.org](http://www.json.org).

YAML  
CloudFormation admite la especificación YAML versión 1.1 con algunas excepciones. CloudFormation no admite las siguientes características:  
+ Las etiquetas `binary`, `omap`, `pairs`, `set` y `timestamp`
+ Alias
+ Fusiones de hash
Para obtener más información acerca de YAML, consulte [http://yaml.org/](https://yaml.org/).

## Más información
<a name="template-formats.learnmore"></a>

Para cada recurso que especifique en su plantilla, debe definir sus propiedades y valores mediante las reglas de sintaxis específicas de JSON o YAML. Para obtener más información acerca de la sintaxis de la plantilla para cada formato, consulte [Secciones de la plantilla de CloudFormation](template-anatomy.md).