“Hello World” do AWS Bucket S3 com CloudFormation

Paulo Pinheiro
6 min readSep 23, 2021
Photo by CHUTTERSNAP on Unsplash (modificado pelo autor)

Intro

Queridos amigos, hoje vamos criar um bucket no AWS S3 utilizando o CloudFormation. Acredito que vamos ficar felizes com o nosso “Hello World”! Vamos nessa?

Eu já tinha criado alguns buckets diretamente no S3 no início do meu aprendizado, mas devemos saber que existe uma forma mais fácil e rápida de fazer isso ao mesmo tempo em que podemos provisionar outros recursos disponibilizados pela AWS.

A intenção hoje não é criar um pipeline de dados completo , mas dar esse primeiro passo criando um ponto de armazenamento no S3. A criação do bucket será de forma manual (no CloudFormation), mas podemos automatizar isso utilizando Python, por exemplo.

✘ Att! Não vou mostrar como criar a conta na AWS!

AWS S3

Sem mais delongas, o S3 é um local para armazenar e recuperar qualquer tipo e volume de dados de forma confiável, rápida, econômica e escalável.

Quando entrei na AWS para conhecer, não sei o motivo de eu ter lembrado do meu bom e velho Windows Explorer. ☺

Mas é isso! A organização funciona da mesma forma que num gerenciador de arquivos e pastas. Um exemplo:

  • Crio uma pasta A
  • Crio uma pasta B dentro da pasta A
  • Jogo o arquivo C na pasta A
  • Realizo uma modificação qualquer no arquivo C e jogo o novo arquivo — chamado D (sim, eu deixei C como arquivo raw) — na pasta B

Pronto. É isso. Acontece que ao invés do limite do nosso HD, contamos com um limite a-perder-de-vista oferecido pela AWS pela nuvem.

AWS CloudFormation

Sem mais outras delongas, o CloudFormation é serviço que facilita o provisionamento de recursos (uma coleção) de forma rápida e consistente. Dessa forma é possível gerar e gerenciar todo um ciclo de vida aplicando IaC (Infraestrutura como Código).

Então podemos criar, atualizar e excluir uma pilha inteira de recursos como se fosse uma coisa só, quantas vezes eu quiser. Legal! Assim vamos otimizar o gerenciamento dos recursos ao invés de gerir um por um.

Como benefícios podemos:

  • Automatizar as melhores práticas implantando pipeline CI/CD
  • Escalar a infraestrutura de forma global
  • Gerenciar recursos privados e de terceiros
  • Integrar com outros serviços da AWS ou de terceiros

“Step-by-Step huuu-babyyyyy…”

Fonte: AWS.com

De maneira geral a ideia é (1) criar um template com o recurso para criação do bucket S3, (2) salvar o template na máquina local ou em um bucket já pré-existente no S3 e (3) fazer o upload do template no CloudFormation para que ele provisione os recursos.

Antes de começar, vamos verificar se tinha algum bucket foi criado na conta (lembrando que um bucket deve ter nome exclusivo no mundo).

Figura 1. Lista de buckets no S3. (No buckets)

Também vamos dar uma olhada no Stacks (Pilhas) do CloudFormation (claro que não tem pilhas criadas pois é primeira vez que uso esse recurso).

Figura 2. Lista de pilhas no CloudFormation.

Para poder realizar a criação de um bucket S3, podemos seguir os seguintes passos:

1. Codificar a infraestrutura utilizando um arquivo de texto no formato YAML (pode ser JSON);

Figura 3. Código base da criação de um Bucket S3. (VSCode)

Cada recurso possui uma série de propriedades. O código acima representa apenas a criação do bucket (pzen-bucket) sem quaisquer outras propriedades, salvo o nome do bucket. Para uma lista de propriedades, clique aqui.

Agora vamos adicionar propriedades de encriptação e bloqueio de acesso público. Vejamos abaixo:

Figura 4. Código com propriedades de encriptação e bloqueio público. (VSCode)

2. Criação de uma pilha no CloudFormation com base na infraestrutura criada no item anterior

Caminho: ➠ AWS ➠ CloudFormation ➠ Create Stack (criar pilha)

Figura 5. Criação da pilha no CloudFormation.

Pela Figura 5, realizamos o upload do arquivo YAML (template) contendo os recursos (pilha) para a criação do bucket. Note que será criado um bucket chamado “cf-templates-16….” (último destaque amarelo) que conterá o template carregado. Na Figura 6, podemos nomear a pilha.

Figura 6. Nomeando a pilha.

De agora em diante podemos deixar as configurações default. Um ponto interessante é que o CloudFormation faz uma estimativa dos ga$to$ com os recursos (Figura 7) criados no template.

Figura 7. Detalhe da estimação de custos.

3. Verificando detalhes do provisionamento

OPS! Erro detectado⁉

Figura 8. Rollback por erro de propriedade não suportada.

Sim, estamos sujeitos a erros. Quando um erro acontece, o CloudFormation realiza um rollback — voltar ao estado anterior — deletando a criação do bucket, nesse caso. Note no destaque amarelo que o problema foi apenas de digitação.

Apenas deletei e reiniciei o processo.

Figura 9. Criação realizada com sucesso. (Eventos)
Figura 10. Criação realizada com sucesso. (Recursos)
Figura 11. Visão geral da pilha.

4. Verificando Bucket S3

Podemos verificar as configurações realizadas na criação do bucket. Existe, como vimos, um bucket extra que armazena o template da infraestrutura.

Figura 12. Bucket provisionado.

Quando determinamos algumas propriedades de bloqueio de acesso público (booleano True), o status em cada um dos parâmetros ficam como ON.

Figura 13. Bloqueios de acesso público ao bucket.

Utilizamos a encriptação padrão (determinada na documentação).

Figura 14. Encriptação ativada.

Finalizando por aqui

Criação do bucket S3 via CloudFormation realizada com sucesso! Parabéns!

Com o CloudFormation podemos modelar e provisionar toda uma infraestrutura na Cloud AWS. A criação de templates facilita o gerenciamento de forma simples e rápida, escalando de acordo com as necessidades.

Cada template traz uma pilha. Uma pilha é um conjunto de recursos que pode ser gerenciado como uma coisa só. Então podemos criar, modificar ou excluir recursos (como S3, RedShift e EC2) no mesmo template ao invés de fazer isso individualmente.

Que tal criar a sua infraestrutura utilizando outros recursos?

Sugestões dos próximos passos

  • Realizar updates nas propriedades do bucket (exemplo: realizar o bloqueio que aparece com status OFF na Figura 13);
  • Provisionar um cluster RedShift junto com um bucket S3 com CloudFormation
  • Automatizar o deploy utilizando a linguagem Python (via boto3)

Obrigado por estar aqui!

  • Se você gostou, siga-me no Medium para mais leituras
  • Conecte-se comigo no LinkedIn
  • Dê uma olhada no meu Website

--

--

Paulo Pinheiro

Escrevo meu aprendizado sobre o mundo dos dados e algumas ferramentas que fazem o pipeline fluir…