Olá! Seja bem-vindo à nossa décima sexta lição.
Na aula anterior, você definiu a peça final do nosso quebra-cabeça de infraestrutura: o aws_ecs_service. Com isso, temos o código Terraform completo para provisionar um cluster ECS, definir uma tarefa para nossa API .NET e gerenciar sua execução, incluindo balanceamento de carga e regras de segurança. No entanto, tudo isso ainda existe apenas como código.
Nesta lição, vamos transformar esse código em infraestrutura real na nuvem. O nosso objetivo é dominar o fluxo de trabalho essencial do Terraform: usar a sequência de comandos init, plan e apply para visualizar e provisionar a infraestrutura na AWS. Este é o coração do Terraform e a base para todas as operações de Infraestrutura como Código (IaC) que você fará.
1. O Fluxo de Trabalho Central do Terraform
O Terraform opera com um fluxo de trabalho de três etapas, projetado para ser previsível e seguro. Pense nisso como um processo de desenvolvimento de software: você primeiro configura seu ambiente de desenvolvimento, depois revisa suas alterações e, finalmente, as implanta.
terraform init: Prepara o ambiente.terraform plan: Revisa as mudanças propostas.terraform apply: Executa as mudanças.
Para uma visão geral rápida e clara desses comandos e do terraform destroy, que completa o ciclo de vida da infraestrutura, assista ao vídeo a seguir.
Terraform explained in 15 mins | Terraform Tutorial for Beginners
O vídeo "Terraform explained in 15 mins" da TechWorld with Nana oferece uma excelente explicação do fluxo de trabalho principal do Terraform.
Assista à seção de 15:39 a 18:00. O vídeo aborda os comandos plan, apply e destroy, explicando a finalidade de cada um no gerenciamento do ciclo de vida da infraestrutura.
Agora, vamos mergulhar em cada etapa para entender o que acontece "sob o capô", algo que sei que você valoriza, dada sua experiência em engenharia e desenvolvimento.
2. Passo a Passo do Fluxo de Trabalho
Etapa 1: terraform init
Este é o primeiro comando que você executa em um novo projeto Terraform.
-
O que faz?
- Inicializa o diretório de trabalho: Cria uma subpasta oculta
.terraform. - Baixa os Provedores (Providers): Lê seus arquivos
.tf, identifica os provedores necessários (comoaws) e faz o download dos plugins correspondentes. Sem o plugin do provedor AWS, o Terraform não saberia como traduzir seu código HCL em chamadas de API para a AWS. - Configura o Backend: Se você definiu um backend remoto (como fizemos com o S3), este comando o configura e garante que o Terraform possa se conectar a ele para ler e escrever o arquivo de estado.
- Cria o Lock File: Gera um arquivo
.terraform.lock.hclque registra as versões exatas dos provedores baixados, garantindo que todos na equipe usem as mesmas versões. É análogo a umpackage-lock.jsonem NodeJS ou um*.csprojque fixa versões de pacotes NuGet.
- Inicializa o diretório de trabalho: Cria uma subpasta oculta
-
Comando:
terraform init
Etapa 2: terraform plan
Este é talvez o comando mais importante para garantir a segurança e a previsibilidade.
-
O que faz?
- Atualiza o Estado: Verifica a infraestrutura real na AWS e atualiza o arquivo de estado (
terraform.tfstate) para corresponder à realidade, detectando qualquer alteração manual (conhecida como drift). - Cria um Plano de Execução: Compara o estado atualizado com o código de configuração (
.tf) para determinar o que precisa ser feito. - Exibe o Plano: Mostra uma saída detalhada do que será criado (
+), modificado (~) ou destruído (-). Nenhuma alteração é feita na sua infraestrutura nesta etapa.
- Atualiza o Estado: Verifica a infraestrutura real na AWS e atualiza o arquivo de estado (
-
Por que é crucial? É a sua "revisão de código" para a infraestrutura. Permite que você valide exatamente o que o Terraform fará antes de autorizar qualquer mudança, evitando surpresas caras ou destrutivas.
-
Comando:
terraform plan
Etapa 3: terraform apply
Este comando executa as mudanças.
- O que faz?
- Gera um Plano (se ainda não houver): Por padrão, ele executa a lógica do
plannovamente. - Solicita Confirmação: Mostra o plano de execução e aguarda sua aprovação explícita (
yes). - Executa o Plano: Após a confirmação, o Terraform começa a fazer chamadas de API para o provedor (AWS) na ordem correta, respeitando as dependências entre os recursos (por exemplo, cria o VPC antes da sub-rede, que é criada antes da instância EC2).
- Atualiza o Estado: Após cada operação bem-sucedida, ele atualiza o arquivo de estado com as informações dos recursos recém-criados ou modificados.
- Gera um Plano (se ainda não houver): Por padrão, ele executa a lógica do
Para entender em profundidade o que acontece durante o apply, o artigo a seguir detalha o processo interno.
What happens when you run Terraform commands?
O artigo "What happens when you run Terraform commands?" do blog one2n.io detalha o funcionamento interno do comando apply.
Leia a seção "What happens when you run Terraform apply?". Concentre-se nos seis passos listados: desde o "Parsing the Configuration" até o "Updating State". Isso se alinha perfeitamente com sua preferência por entender como as tecnologias funcionam internamente.
O diagrama a seguir, do mesmo artigo, resume visualmente todo o fluxo.
Este diagrama ilustra o fluxo de trabalho de ponta a ponta do Terraform, desde a leitura dos arquivos de configuração, passando pela construção do grafo de dependências, interação com os provedores, comunicação com as APIs da nuvem e, finalmente, a atualização do arquivo de estado.
- Comando:
terraform apply
3. Colocando em Prática: Provisionando nosso Cluster ECS
Agora é hora de usar esse fluxo para provisionar a infraestrutura que definimos nas aulas anteriores.
Pré-requisitos:
- Certifique-se de que o AWS CLI esteja instalado e configurado com credenciais que tenham permissão para criar os recursos (VPC, ECS, IAM, etc.). Você pode configurar um perfil com
aws configure --profile <seu-perfil>. - Tenha todos os arquivos Terraform que criamos (
vpc.tf,ecr.tf,iam.tf,ecs.tf,alb.tf,sg.tf) no mesmo diretório.
O vídeo a seguir demonstra um fluxo prático de init, plan e apply ao criar um recurso AWS.
Terraform Tutorial on AWS - Getting Started
Para ver uma demonstração prática do fluxo de trabalho, o vídeo "Terraform Tutorial on AWS - Getting Started" de Anton Putra é excelente.
Assista aos seguintes trechos: 15:41 a 16:39: Demonstração do terraform init e terraform plan, mostrando a saída e como o Terraform se prepara para a execução. 24:47 a 25:54: Demonstração do terraform apply, onde o recurso é efetivamente criado na AWS. 25:54 a 29:07: Mostra como modificar um recurso no código e aplicar novamente, ilustrando como o Terraform gerencia atualizações.
Agora, siga estes passos no seu terminal, no diretório do seu projeto Terraform:
-
Initialize:
terraform initVocê verá o Terraform baixando o provedor
hashicorp/awse inicializando o backend S3 que configuramos. -
Validate (Opcional, mas recomendado):
O Terraform oferece um comando para verificar a sintaxe do seu código antes de criar um plano. É uma verificação rápida e útil.terraform validateSe tudo estiver correto, ele retornará uma mensagem de sucesso.
-
Plan:
terraform planO Terraform exibirá uma longa lista de recursos a serem criados. Revise a saída com atenção. No final, você verá um resumo como
Plan: X to add, 0 to change, 0 to destroy..Xserá o número total de recursos que estamos criando (VPC, sub-redes, cluster, serviço, ALB, etc.). -
Apply:
Se o plano parecer correto, é hora de aplicá-lo.terraform applyO Terraform mostrará o mesmo plano novamente e pedirá sua confirmação. Digite
yese pressione Enter.Agora, sente-se e observe. O Terraform começará a provisionar tudo na sua conta AWS. Isso levará vários minutos. Você verá logs em tempo real à medida que cada recurso é criado.
Após a conclusão, você terá uma infraestrutura ECS totalmente funcional esperando pela imagem da sua aplicação!
Teste seu entendimento!
Você executa terraform apply e, no meio do processo, sua conexão com a internet cai. Quando você se reconecta, o que acontece se você executar terraform apply novamente? O Terraform tentará criar todos os recursos do zero?
Show answer
Não, ele não tentará criar tudo do zero. Graças ao arquivo de estado, o Terraform é resiliente a falhas. Ao executar terraform apply novamente, ele primeiro fará o refresh do estado, comparando-o com os recursos que já existem na AWS. Ele identificará quais recursos da execução anterior foram criados com sucesso e quais falharam ou não foram iniciados. O novo plano de execução conterá apenas as ações necessárias para criar os recursos restantes e completar a configuração, "continuando" de onde parou. Essa é uma das principais vantagens de usar uma ferramenta baseada em estado como o Terraform.
4. O Fim do Ciclo: terraform destroy
Quando você não precisar mais da infraestrutura (por exemplo, após um teste), você pode removê-la completamente com um único comando.
-
O que faz? Lê o arquivo de estado para saber tudo o que ele gerencia e cria um plano para destruir todos esses recursos na ordem inversa de sua criação.
-
Comando:
terraform destroyAssim como o
apply, ele pedirá uma confirmação antes de apagar qualquer coisa. Use com cuidado!
Conclusão
Parabéns! Você não apenas aprendeu a teoria, mas também executou o fluxo de trabalho fundamental do Terraform para provisionar uma arquitetura de microsserviço complexa na AWS.
Principais Pontos:
- O fluxo de trabalho
init->plan->applyé a espinha dorsal do Terraform, garantindo previsibilidade, segurança e automação. initprepara seu ambiente baixando provedores e configurando o backend.plané sua rede de segurança, um "dry run" que mostra exatamente o que será alterado sem tocar na infraestrutura.applyexecuta o plano, transformando seu código em recursos reais na nuvem e mantendo o arquivo de estado sincronizado.destroycompleta o ciclo de vida, permitindo que você desmonte de forma limpa toda a infraestrutura gerenciada.
Próxima Lição:
Nossa infraestrutura está de pé, mas nosso código está cheio de valores fixos ("hardcoded") como nomes de recursos e regiões. Isso o torna inflexível e difícil de reutilizar. Na próxima lição, vamos refatorar nosso projeto para gerenciar a configuração com variáveis do Terraform e expor detalhes dos recursos usando outputs, dando um passo crucial em direção a um código de IaC maduro e reutilizável.