• JP

Criando recursos utilizando CloudFormation

Existem diferentes formas de criar recursos na AWS, você pode criar um Bucket S3, SQS, RDS e dentre vários outros recursos de forma manual. Mas da forma que a sua infra vai crescendo, criar recursos manualmente se torna insustentável, pois chegará um ponto que se torna impossível gerenciar estes recursos.


Uma outra forma é utilizando ferramentas IaC - Infrastructure as code que permite criar, gerenciar e provisionar recursos na nuvem com pouco esforço e mais clareza. Na AWS podemos utilizar o CloudFormation para nos ajudar na criação dos recursos em que deseja utilizar.


Como funciona


A partir de um template no formato JSON ou YAML e em seguida efetuando o upload deste arquivo para o CloudFormation na AWS. Bem simples.


Para entender melhor este processo, vamos criar um Bucket S3 e uma fila SQS através do CloudFormation, seguindo o que foi descrito anteriormente, utilizando um template.


Existe duas formas de criar um template, você pode utilizar um arquivo JSON ou YAML. Nesse exemplo vamos utilizar um template no formato YAML.


Criando o template para um Bucket S3

Resources:
  S3Bucket:
    Type: 'AWS::S3::Bucket'
    DeletionPolicy: Retain
    Properties:
      BucketName: blog.data
      AccessControl: Private
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: "AES256"

Para o template acima, utilizamos alguns parâmetros essenciais para a criação do Bucket, a lista completa pode ser consultada na própria documentação da AWS.


A seguir, vamos entender de forma resumida o que significa cada parâmetro:



  • Nas propriedades, definimos as características do Bucket:

  • BucketName: Nome do bucket. Lembrando que o nome do bucket deve ser único e deve seguir alguns padrões de nome conforme a documentação

  • AccessControl: É o controle de acesso ao Bucket, existe diferentes opções de acesso, segue:

  • Private

  • PublicRead

  • PublicReadWrite

  • AuthenticatedRead

  • LogDeliveryWrite

  • BucketOwnerRead

  • BucketOwnerFullControl

  • AwsExecRead

  • BucketEncryption: São as configurações de criptografia dos objetos do Bucket, neste caso utilizamos o algoritmo AES256


Fazendo o upload e criando o recurso


1. No console da AWS, acesse o CloudFormation

2. Clique no botão Create Stack

3. Selecione como pré-requisito Template is ready

4. Na seção Specify template, selecione Upload a template file, selecione o arquivo criado clicando em Choose file e por último clique no botão Next. Uma nova página será aberta para o preenchimento do nome da stack.

5. Clique em Next e faça o mesmo para as próximas paginas.

6. Por fim, o recurso será criado. Isso pode demorar alguns minutos dependendo do recurso.

Perceba que foram criados dois buckets:

  • blog.data: Criado via CloudFormation

  • cf-templates-1nwl4b3ve439n-us-east-1: Bucket criado de forma automática no ato do upload do arquivo no início do processo.

Criando o template para uma fila SQS

Resources:
  SQS:
    Type: 'AWS::SQS::Queue'
    Properties:
      QueueName: sqs-blog.fifo
      ContentBasedDeduplication: true
      DelaySeconds: 120
      FifoQueue: true
      MessageRetentionPeriod: 3600

Entendendo o template:

  • SQS: Identificador do recurso

  • Type: Tipo do recurso

  • QueueName: Nome da fila SQS. Um detalhe importante é o sufixo .fifo, necessário caso a fila seja do tipo Fifo

  • ContentBasedDeduplication: Garante a não duplicidade das mensagens, funciona apenas para filas do tipo Fifo

  • DelaySeconds: Tempo de delay para cada mensagem (em segundos)

  • FifoQueue: Forma de como a fila gerencia a chegada e saída das mensagens (First-in - First-out)

  • MessageRetentionPeriod: Período em que as mensagens será retidas na fila (em segundos)


Fila SQS criada


Conclusão


O CloudFormation é uma ferramenta exclusiva da AWS para a criação de recursos, ou seja, caso a sua arquitetura seja criado ou mantida com base na nuvem da AWS, o CloudFormation é uma ótima escolha. Caso você precise manter uma flexibilidade entre nuvens, como por exemplo a possibilidade em utilizar a Google Cloud, o Terraform pode ser uma melhor opção como ferramenta IaC.


É isso, curtiu? Até mais!


Posts recentes

Ver tudo