AWS CloudFormation: Construa sua infraestrutura na nuvem de forma rápida e eficiente com o poder do IaC!

O AWS CloudFormation usa uma linguagem de modelo para descrever e provisionar recursos da AWS de forma programática. A sintaxe dessa linguagem de modelo é baseada em JSON e YAML e é usada para descrever os recursos da AWS que devem ser criados ou modificados.

Explicação sobre a sintaxe do CloudFormation

Resources: Este é o bloco principal do CloudFormation e é onde você define os recursos que deseja criar ou modificar. Cada recurso é definido dentro deste bloco, com um nome exclusivo que é usado para referenciar o recurso em outras partes do modelo.

Type: O tipo de recurso que você deseja criar ou modificar. O CloudFormation suporta uma ampla variedade de tipos de recursos da AWS, como instâncias EC2, grupos de segurança, buckets S3, entre outros.

Properties: As propriedades específicas do recurso que você está criando ou modificando. Cada tipo de recurso tem um conjunto diferente de propriedades que podem ser definidas, como o nome do bucket S3, o tipo de instância EC2, entre outras.

Parameters: Define parâmetros que podem ser passados para o modelo do CloudFormation ao ser executado. Isso pode permitir que você crie um modelo genérico que pode ser usado para criar recursos em vários ambientes.

Mappings: Usado para mapear chaves de valores em um bloco do modelo para outros valores em outro bloco. Por exemplo, você pode usar Mappings para mapear um nome de região AWS em um AMI específico.

Conditions: Permite que você especifique condições para a criação ou modificação de um recurso. Isso pode ser usado para criar recursos com base em certas variáveis ou condições.

Outputs: Define valores de saída que podem ser usados por outros modelos ou scripts. Isso pode incluir informações sobre o ambiente criado, como endpoints de API ou URLs de serviços.

Em resumo, a sintaxe do CloudFormation é baseada em JSON e YAML e usa uma variedade de blocos para definir recursos, parâmetros, mapeamentos, condições e saídas. É uma linguagem poderosa que permite a criação e a modificação de recursos da AWS de forma programática.

Exemplo de CloudFormation para criação de uma instancia de EC2

Aqui está um exemplo de modelo do CloudFormation para criar uma instância EC2 na região us-east-1:

Resources:
  EC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      ImageId: "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI ID
      InstanceType: "t2.micro"
      KeyName: "my-key-pair"
      SecurityGroupIds:
        - sg-1234567890abcdef # Security Group ID
      SubnetId: subnet-1234567890abcdef # Subnet ID
Outputs:
  InstanceId:
    Value: !Ref EC2Instance
ec2-instance.yml

Este modelo define um recurso “EC2Instance” que é uma instância EC2 do tipo “t2.micro”, usando a imagem “Amazon Linux 2 AMI ID”. Ele também define a chave de acesso SSH que será usada para acessar a instância, o grupo de segurança e a sub-rede.

Para usar este modelo do CloudFormation, você pode salvá-lo em um arquivo YAML por exemplo, “ec2-instance.yml” (o nome do arquivo é de livre escolha) e, em seguida, usar o AWS CLI para criar a pilha:

aws cloudformation create-stack --stack-name my-ec2-instance --template-body file://ec2-instance.yml
ShellScript

O comando acima criará uma nova pilha chamada “my-ec2-instance” com base no modelo “ec2-instance.yml”. O CloudFormation provisionará os recursos necessários (a instância EC2) e você poderá acessá-los usando a chave de acesso SSH especificada no modelo.

É importante lembrar que, antes de criar uma instância EC2, você deve criar os recursos necessários, como uma VPC, sub-redes (subnets), grupos de segurança (security groups) e chaves de acesso SSH. O modelo do CloudFormation acima assume que esses recursos já foram criados e usa seus IDs para criar a instância EC2.

Exemplos de YAML para criação de recursos

Abaixo vamos demonstrar a criação de alguns recursos na AWS usando o CloudFormation.

Criação de um Bucket S3

Segue abaixo um exemplo básico de modelo CloudFormation para criar um bucket S3:

Resources:
  MyS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-s3-bucket-name
      AccessControl: Private
      VersioningConfiguration:
        Status: Enabled
YAML

Nesse exemplo, o modelo cria um recurso AWS S3 Bucket com o nome my-s3-bucket-name , que é definido na propriedade BucketName . A propriedade AccessControl é definida como “Private”, o que significa que apenas o proprietário da conta AWS tem acesso ao bucket. A propriedade VersioningConfiguration é usada para habilitar o versionamento de objetos no bucket.

Exemplo de criação de VPC com subnets

Segue abaixo um exemplo básico de modelo CloudFormation para criar uma VPC com sub-redes:

Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: "10.0.0.0/16"
      Tags:
        - Key: Name
          Value: my-vpc-name

  MyPublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref MyVPC
      CidrBlock: "10.0.1.0/24"
      AvailabilityZone: !Select [0, !GetAZs ""]
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: my-public-subnet-name

  MyPrivateSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref MyVPC
      CidrBlock: "10.0.2.0/24"
      AvailabilityZone: !Select [0, !GetAZs ""]
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: my-private-subnet-name
YAML

Nesse exemplo, o modelo cria uma VPC com o CIDR block de 10.0.0.0/16 e define um nome com a tag Name . Em seguida, cria duas sub-redes (subnets): uma pública, com o CIDR block de 10.0.1.0/24 , disponível na primeira zona de disponibilidade da região atual e habilita o atributo MapPublicIpOnLaunch , e uma privada, com o CIDR block de 10.0.2.0/24 , também disponível na primeira zona de disponibilidade da região atual e com o atributo MapPublicIpOnLaunch desabilitado. É importante notar que a seleção da primeira zona de disponibilidade é feita utilizando a função !Select e a função !GetAZs .

Conclusão

É muito simples a utilização do CloudFormation para criação de recursos na AWS, além de garantir que você possa versionar sua infraestrutura, garantindo que quaisquer alterações sejam mapeadas de maneira mais fácil, além de facilitar migrações entre contas.

Links

Mauricio Lima
Mauricio Lima

Bacharel em Ciência da Computação, profissional dedicado ao desenvolvimento de software e entusiasta da tecnologia.

Artigos: 65