Repositório de exemplo para criação de bucket S3 na AWS utilizando Terraform como IaC para persistir os estados dos repositórios de Terraform.
Estamos usando o Terraform para criar e atualizar recursos da AWS. Sempre que executamos o terraform plan ou o terraform apply, o Terraform consegue encontrar os recursos criados anteriormente e atualizá-los de acordo. Mas como o Terraform sabia quais recursos deveria gerenciar?
Toda vez que você executa o Terraform, ele registra informações sobre qual infraestrutura foi criada em um arquivo de estado (tfstate) do Terraform. Este arquivo está no formato JSON e possui mapeamento de recursos do terraform.
Porém, utilizando o Terraform dentro de uma Squad, onde possuem várias pessoas alterando/criando recursos e pipelines diferentes executando várias vezes durante o dia, como garantimos que o Terraform vai identificar que aquele recurso na AWS e qual o estado dele?
Para isso, utilizei esse repositório para criar uma estrutura de compartilhamento de estado remoto utilizando o S3 e DynamoDB, sendo persistido o estado do Terraform dentro desse bucket para que nas próximas execuções o Terraform consiga recuperar o estado daquele recurso para conseguir gerar o Terraform Plan de forma correta, descrevendo apenas o que está sendo alterado/criado nesse repositório.
Para facilitar a execução do Terraform de forma automatizada para esse e seus próximos repositório, criei essa Action para facilitar a integração com o bucket S3 como backend do Terraform.
| Tecnologia | Versão | Guia de instalação | Instalação obrigatória |
|---|---|---|---|
| Terraform | 1.0.9 | Link | Sim |
Esse repositório persiste o estado do Terraform de forma remota, salvando o tfstate em um s3 na AWS, permitindo que
você possa trabalhar em equipe nesse repositório, que também matenha o estado do seus recursos criados via Terraform em
arquivos de estado evitando possíveis conflitos nas alterações desse recurso e que também recupere outputs criados
dentro de outros repositórios de Terraform dentro desse mesmo bucket.
- Para que as actions do github funcionem, basta configurar as secrets
AWS_ACCESS_KEY_IDeAWS_SECRET_ACCESS_KEYno seu repositório. - Caso queira entender um pouco mais sobre essa action, basta acessar esse repositório.
- Caso queira apenas rodar localmente sem configuração de estado remoto, basta passar o parâmetro
-backend=falseno comandoterraform initou comentar o arquivobackend.tf. - Executar os comandos abaixo na seguinte ordem:
terraform init -backend=falseterraform fmt -checkterraform validate -no-colorterraform plan -lock=falseterraform apply -lock=false
Após isso basta acessar a sua conta na AWS, validar a criação dos recursos, executar novas pipeline se integrando com o bucket criado e partir para as próximas criações de recursos na Cloud via Terraform :).