Prática IaC
Fixar conceito
Infrastructure as Code (Infraestrutura como Código) é uma abordagem que permite gerenciar e provisionar recursos de infraestrutura usando código e arquivos de configuração, ao invés de processos manuais.
Com IaC, você define sua infraestrutura em arquivos de texto que podem ser versionados, revisados e reutilizados. Isso traz benefícios como:
- Consistência: A mesma configuração pode ser aplicada múltiplas vezes
- Versionamento: Mudanças podem ser rastreadas usando Git
- Reutilização: Configurações podem ser compartilhadas entre projetos
- Automação: Reduz erros humanos e acelera deployments
Comparação com a aula anterior
Na aula anterior, criamos uma VM manualmente pelo console da AWS e depois fizemos configurações via SSH.
Com Terraform, faremos tudo isso através de código!
O Terraform é uma das ferramentas mais populares para IaC.
Desenvolvido pela HashiCorp (2014), ele permite definir infraestrutura usando a linguagem HCL (HashiCorp Configuration Language).
O Terraform suporta múltiplos provedores de nuvem (AWS, Azure, Google Cloud) e serviços diversos, permitindo criar desde uma simples VM até arquiteturas complexas.
Perigo!
Se fizer esta aula pela metade, não deixe VMs em execução.
Confira, ao final do tutorial, o comando para destruir os recursos criados.
Você também pode utilizar o console para conferir se sobrou algo (para destruir, prefira o terraform, não é boa prática utilizar o console uma vez que introduzimos IaC).
Qualquer dúvida, entre em contato com o professor.
OpenTofu: Curiosidade!
Há alguns anos, a HashiCorp decidiu mudar a licença do Terraform para um modelo mais restritivo, o que gerou preocupação sobre a liberdade e sustentabilidade do projeto.
Como resposta, a comunidade criou um fork aberto para manter a colaboração e garantir transparência no desenvolvimento.
Inicialmente chamado de OpenTF e depois renomeado para OpenTofu, o projeto passou a ser mantido pela Linux Foundation, assegurando governança aberta e compatibilidade com o Terraform.
Assim, tornou-se uma alternativa livre e confiável para usuários e empresas que dependem de IaC.
Extensão VSCode
Instale a extensão Hashicorp Terraform no VS Code.
Estrutura do projeto
Vamos criar um projeto Terraform que reproduzirá o deploy da API de filmes que fizemos manualmente na aula anterior.
Exercise
Answer
O Terraform criou um diretório .terraform/
e baixou o plugin do provedor AWS. Também criou um arquivo .terraform.lock.hcl
para fixar as versões dos provedores.
Criando a instância EC2
Vamos começar criando apenas a instância EC2 com Terraform, equivalente ao que fizemos manualmente na aula anterior.
Chave SSH
O código abaixo assume que você tem uma chave SSH em ~/.ssh/id_ed25519.pub
. Se não tiver, crie uma com:
Dica!
Você pode conferir as imagens disponíveis da canonical com:
Info!
099720109477
é o ID do dono oficial das imagens Ubuntu na AWS (canonical).
$ aws ec2 describe-images --owners 099720109477 --query 'Images[*].[ImageId,Name,CreationDate]' --output table --profile dataeng
Acesso SSH
Perceba que, na aula passada, utilizamos um arquivo .pem
para obter acesso à VM.
Nesta aula, a chave da sua máquina é um arquivo id_ed25519
e estará autorizada a acessar a instância.
Planejamento e aplicação
O comando terraform plan
é usado no Terraform para gerar e exibir um plano de execução, mostrando quais mudanças serão feitas na infraestrutura antes de aplicá-las.
Ele compara o estado atual dos recursos (registrado no state file e no provedor) com a configuração descrita nos arquivos .tf
e indica o que será criado, alterado ou destruído.
Info
O terraform plan
serve como uma prévia segura para validar se as alterações desejadas estão corretas, permitindo revisar e evitar modificações indesejadas na infraestrutura antes de executar o terraform apply
.
Exercício
Answer
Deve retornar algo contendo, dentre outras informações:
# aws_instance.movies_api will be created
...
# aws_key_pair.movies_api_key will be created
...
# aws_security_group.movies_api_sg will be created
...
Plan: 3 to add, 0 to change, 0 to destroy.
...
Exercício
Answer
Duas!
- Uma da aula passada (desligada)
- Uma que acabou de ser criada (ligada)
Exercise
Answer
- Velocidade: Terraform cria todos os recursos de uma vez
- Reprodutibilidade: O mesmo código pode ser executado várias vezes
- Documentação: A infraestrutura fica documentada no código
- Versionamento: Mudanças podem ser rastreadas no Git
- Consistência: Reduz erros de configuração manual
Automatizando a configuração da aplicação
Agora vamos estender nosso Terraform para instalar e configurar a aplicação automaticamente, eliminando as etapas manuais via SSH.
Exercício
Exercício
Exercício
Exercício
Testando a infraestrutura completa
Exercício
Dica!
Você pode conferir o log de execução do script user_data.sh
em /var/log/cloud-init-output.log
.
Faça SSH na VM e rode:
$ cat /var/log/cloud-init-output.log
Exercício
Exercício
Exercise
Answer
- Automação completa: A instância fica pronta sem intervenção manual
- Reprodutibilidade: Sempre teremos a mesma configuração
- Escalabilidade: Facilita a criação de múltiplas instâncias
- Documentação: Todo processo fica documentado no código
- Redução de erros: Elimina passos manuais propensos a erro
Organizando o código
Para projetos maiores, é uma boa prática organizar o código Terraform em múltiplos arquivos.
Exercício
Assim, prosseguimos para a reorganização do código!
Exercício
Exercício
Exercício
Limpeza dos recursos
Importante!
Sempre remova recursos que não estão em uso para evitar custos desnecessários.
Exercício
Exercício