Criando um bucket S3 com o CloudFormation

O desenvolvimento e a manutenção de aplicações modernas exigem rapidez no provisionamento, gerenciamento e entrega da infraestrutura necessária para atender às demandas. Nesse contexto, a infraestrutura tradicional, com processos manuais e demorados para criar ambientes de desenvolvimento, testes e produção, não atende mais aos requisitos dessas aplicações. Assim, a Infraestrutura como Código (IaC - Infrastructure as Code) surge como uma solução para responder ao dinamismo, complexidade e velocidade dos negócios atuais.

Na IaC, a configuração, provisionamento e administração da infraestrutura estão codificados em arquivos de texto, que podem ser versionados em sistemas de controle de versão, como o Git. Em vez de realizar essas atividades manualmente, a IaC permite um processo automatizado e controlado.

Na AWS, o serviço que possibilita criar e replicar uma infraestrutura a partir de um código é o Amazon CloudFormation. Ele permite que a infraestrutura seja replicada várias vezes, oferecendo um serviço gratuito, em que o pagamento ocorre apenas pelos recursos provisionados.

Dois conceitos importantes do CloudFormation são:

  • Template: No AWS CloudFormation, um template é um arquivo em formato JSON ou YAML que descreve a infraestrutura desejada, incluindo recursos como instâncias EC2, redes e permissões, de forma declarativa e reutilizável.
  • Stack: A partir do template, uma stack é criada, representando a implementação prática dos recursos definidos. Em outras palavras, a stack é o conjunto dos recursos ativos gerenciados em conjunto.

Podemos dizer, de forma resumida, que o CloudFormation possibilita a criação, atualização e exclusão de infraestrutura de forma automatizada, garantindo consistência e controle na nuvem.

Depois dessa breve introdução, vamos colocar a mão na massa!

Hands-on

1) Criando o template

Abra um editor de texto (VsCode, Notepad, Sublime Text, ou outro de sua preferência) e copie o trecho abaixo. Salve em formato .yaml

Resources:
  TesteBucketS3:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
      BucketName: <nome_do_bucket>

Se preferir, você pode baixar o arquivo também:

Nesse template, temos as seguintes partes:

  • Resources - indica que serão especificados os recursos da infraestrutura na AWS;
  • TesteBucketS3 - é o indicador lógico do recurso, um nome único para referenciar esse recurso dentro do template caso fosse necessário - poderia ser qualquer outro nome;
  • Type - define o tipo do recurso que será criado;
  • AWS::S3::Bucket - é o nome do recurso, no caso é o Bucket S3;
  • Properties - define as configurações específicas (propriedades) do Bucket S3;
  • AccessControl - é uma das propriedades do bucket, que define o acesso somente por usuários autenticados e com permissão para tal;
  • BucketName - é o nome do bucket que será criado.

Ah, em BucketName lembre-se de trocar o <nome_do_bucket> para um nome de sua preferência. E também lembre que o nome para um Bucket S3 deve ser único e global na AWS.

Continuando...

2) Criar uma stack

Acesse a console AWS e procure por CloudFormation

Clique em Criar pilha

Para criar a pilha (stack), vamos selecionar a opção Escolher de um modelo existente, e especificar esse modelo marcando a opção Fazer upload de um arquivo de modelo

Em seguida, vamos escolher o arquivo .yaml e fazer upload. Veja que será criado outro Bucket S3 para armazenar o modelo do CloudFormation:

Clique em Próximo. Em seguida, dê um nome para a pilha e clique em Próximo novamente.

Clique em Próximo até chegar na página Revisar e Criar

Desça até ao final da página e clique em Enviar. Não tem muito segredo, o CloudFormation vai apresentar os eventos da criação da Stack e fazer o rollbak (reverter) caso ocorra algum problema.

Se tudo der certo, vai aparecer o status CREATE_COMPLETE

Para conferir se o Bucket foi criado, você pode acessar a Pilha -> Recursos

3) Limpando o ambiente

Para limpar o ambiente, você precisa selecionar e exluir a pilha

Confirme a exclusão. Em seguida, acesse o S3 e exclua o bucket criado para armazenar o modelo. Antes de excluir, você vai receber um alerta para esvaziar o bucket. Confirme e exclua tudo.

Prontinho, ambiente limpo 🧹

Bons estudos!

Documentação