

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

Você pode criar modelos do CloudFormation nos formatos JSON ou YAML. Ambos os formatos atendem ao mesmo propósito, mas oferecem vantagens distintas em termos de legibilidade e complexidade.
+ **JSON**: o JSON é um formato leve de intercâmbio de dados que é fácil de ser analisado e gerado por computadores. No entanto, ele pode ser complicado para humanos lerem e escreverem, especialmente em configurações complexas. Em JSON, o modelo é estruturado usando chaves `{}` e colchetes `[]` aninhados para definir recursos, parâmetros e outros componentes. Sua sintaxe requer uma declaração explícita de cada elemento, o que pode tornar o modelo extremamente detalhado, mas garante a adesão estrita a um formato estruturado. 
+ **YAML**: o YAML foi projetado para ser mais legível por humanos e menos detalhado do que o JSON. Ele usa recuo em vez de chaves e colchetes para denotar o aninhamento, o que pode facilitar a visualização da hierarquia de recursos e parâmetros. O YAML geralmente é preferido por sua clareza e facilidade de uso, especialmente ao lidar com modelos mais complexos. No entanto, a dependência do YAML do uso de recuos pode levar a erros se o espaçamento não for consistente, o que requer atenção cuidadosa para manter a precisão.

## Estrutura do modelo
<a name="template-structure"></a>

Os modelos do CloudFormation são divididos em seções diferentes, e cada seção se destina a conter um tipo específico de informação. Algumas seções devem ser declaradas em uma ordem específica e, para outras, a ordem não importa. No entanto, à medida que você cria o modelo, pode ser útil usar a ordem lógica dos exemplos a seguir, porque valores em uma seção podem fazer referência a valores de uma seção anterior. 

Ao criar modelos, não use seções importantes duplicadas, por exemplo, a seção `Resources`. Embora o CloudFormation possa aceitar o modelo, ele terá um comportamento indefinido ao processá-lo e poderá provisionar recursos incorretamente ou retornar erros inexplicáveis.

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

O exemplo a seguir mostra a estrutura de um modelo no formato JSON com todas as seções disponíveis.

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

O exemplo a seguir mostra a estrutura de um modelo no formato YAML com todas as seções disponíveis.

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

## Comentários
<a name="template-comments"></a>

Em modelos formatados em JSON, não há suporte a comentários. O JSON, por design, não inclui uma sintaxe para comentários, o que significa que não é possível adicionar comentários diretamente na estrutura JSON. No entanto, se você precisar incluir notas explicativas ou documentação, considere adicionar metadados. Para obter mais informações, consulte o atributo [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-metadata.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-metadata.html).

Nos modelos formatados em YAML, é possível incluir comentários em linha usando o símbolo `#`.

O exemplo a seguir mostra um modelo YAML com comentários em linha.

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

## Especificações
<a name="template-formats.supported-specifications"></a>

O CloudFormation é compatível com as seguintes especificações de JSON e YAML:

JSON  
O CloudFormation segue o padrão JSON ECMA-404. Para obter mais informações sobre o formato JSON, consulte [http://www.json.org](http://www.json.org).

YAML  
O CloudFormation é compatível com a especificação do YAML versão 1.1 com algumas exceções. O CloudFormation não é compatível com os seguintes recursos:  
+ As tags `binary`, `omap`, `pairs`, `set` e `timestamp`
+ Aliases
+ Mesclagens de hash
Para obter mais informações sobre o YAML, consulte [https://yaml.org/](https://yaml.org/).

## Saiba mais
<a name="template-formats.learnmore"></a>

Para cada recurso especificado no modelo, você define as propriedades e os valores usando as regras de sintaxe específicas do JSON ou do YAML. Para obter mais informações sobre a sintaxe de modelo de cada formato, consulte [Seções de modelos do CloudFormation](template-anatomy.md).