Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 78

Terraform AWS Provisioning Workflow

Recommended resources

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.

  1. terraform init: Prepara o ambiente.
  2. terraform plan: Revisa as mudanças propostas.
  3. 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 (como aws) 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.hcl que registra as versões exatas dos provedores baixados, garantindo que todos na equipe usem as mesmas versões. É análogo a um package-lock.json em NodeJS ou um *.csproj que fixa versões de pacotes NuGet.
  • 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.
  • 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 plan novamente.
    • 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.

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:

  1. Initialize:

    terraform init
    

    Você verá o Terraform baixando o provedor hashicorp/aws e inicializando o backend S3 que configuramos.

  2. 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 validate
    

    Se tudo estiver correto, ele retornará uma mensagem de sucesso.

  3. Plan:

    terraform plan
    

    O 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.. X será o número total de recursos que estamos criando (VPC, sub-redes, cluster, serviço, ALB, etc.).

  4. Apply:
    Se o plano parecer correto, é hora de aplicá-lo.

    terraform apply
    

    O Terraform mostrará o mesmo plano novamente e pedirá sua confirmação. Digite yes e 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 destroy
    

    Assim 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.
  • init prepara 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.
  • apply executa o plano, transformando seu código em recursos reais na nuvem e mantendo o arquivo de estado sincronizado.
  • destroy completa 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.