“Hello World” do AWS Bucket S3 com CloudFormation
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…”
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).
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).
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);
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:
2. Criação de uma pilha no CloudFormation com base na infraestrutura criada no item anterior
Caminho: ➠ AWS ➠ CloudFormation ➠ Create Stack (criar pilha)
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.
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.
3. Verificando detalhes do provisionamento
OPS! Erro detectado⁉
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.
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.
Quando determinamos algumas propriedades de bloqueio de acesso público (booleano True), o status em cada um dos parâmetros ficam como ON.
Utilizamos a encriptação padrão (determinada na documentação).
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)