Introdução
Nos laboratórios anteriores, você atuou como o Chef, escrevendo cardápios (configurações) para o Robô (Terraform) preparar (criar). Mas como o robô se lembra do que já preparou?
Imagine que você tivesse um depósito, mas perdesse a lista de inventário. Você não saberia o que tem, onde está cada item nem se algo foi roubado.
No Terraform, essa lista de inventário é chamada de estado. Ela é a memória do Terraform. O estado registra os recursos que ele criou e relaciona os objetos da configuração aos objetos reais da infraestrutura.
O estado é o que torna prática a administração declarativa. Sem ele, o Terraform poderia ler seus arquivos, mas não teria uma memória confiável para saber quais objetos reais correspondem a essas declarações.
O estado é uma das ideias mais importantes do Terraform. Sem ele, o Terraform não saberia o que já existe, o que mudou nem o que precisa ser atualizado ou recriado.
Neste laboratório, você verá como o Terraform usa esse estado para manter sua infraestrutura íntegra. Você assumirá o papel do "Caos", causando problemas manualmente, e observará o Terraform detectar o dano e "curar" o sistema automaticamente.
Inspecionar o estado
Este ambiente já foi pré-configurado. Existe um arquivo main.tf, e terraform apply já foi executado. Isso significa que a infraestrutura — um contêiner Docker — já está em execução.
Primeiro, confirme se o contêiner está em execução:
sudo docker ps
Você deverá ver um contêiner chamado tutorial.
Agora, liste os arquivos do diretório atual. Você verá terraform.tfstate.
ls -l
Esse arquivo é o "Diário Secreto" do Terraform. Ele registra tudo o que o Terraform faz. Vamos consultar seu conteúdo.
cat terraform.tfstate
A saída está em um formato chamado JSON. No início, ela pode parecer complicada, mas é apenas uma forma estruturada de registrar informações para os computadores.
Em algum trecho desse texto, você verá docker_container e o ID do contêiner em execução. Isso comprova que o Terraform "conhece" esse contêiner específico.
Regra crítica: nunca edite esse arquivo manualmente. Se você alterá-lo, o Terraform pode perder informações e acabar excluindo ou corrompendo sua infraestrutura por engano. Sempre deixe o Terraform gerenciar o próprio diário.
Esse aviso é importante porque o estado contém metadados autoritativos, e não apenas um registro de atividades. Se ele for corrompido, o Terraform poderá tomar decisões destrutivas ou confusas mais tarde.
Criar um desvio
O Terraform espera ser o único responsável por gerenciar esses recursos. Mas, no mundo real, problemas acontecem. Talvez um servidor falhe ou um colega exclua algo manualmente por engano.
Essa situação é chamada de desvio. Isso significa que a "Realidade" não corresponde mais ao "Plano".
Desvios são comuns em ambientes compartilhados porque pessoas, scripts, falhas e sistemas externos podem alterar a infraestrutura fora do ciclo normal de controle do Terraform.
Vamos causar um pouco de caos. Vamos ignorar o Terraform e excluir o contêiner diretamente usando comandos do Docker.
sudo docker rm -f tutorial
Confirme que o contêiner realmente foi removido:
sudo docker ps
Neste momento, temos um problema:
- Realidade: o contêiner está parado e foi removido.
- Arquivo de estado: o Terraform acredita que o contêiner ainda está ativo, porque ninguém informou o contrário.
Detectar o desvio
Agora, vamos verificar se o Terraform percebe a remoção.
Quando você executa terraform plan, a primeira coisa que o Terraform faz é uma "atualização" (Refresh). Ele consulta o Docker e pergunta: "O contêiner com o ID XYZ ainda existe?"
Execute o comando de planejamento:
terraform plan
Observe atentamente a saída. Você deverá ver: docker_container.nginx: Refreshing state...
Em seguida, o Terraform exibirá um plano com um sinal de + verde, indicando uma criação.
Terraform will perform the following actions:
## docker_container.nginx will be created
+ resource "docker_container" "nginx" { ... }
O Terraform descobriu o problema! Ele raciocinou: "Meu plano diz que deveria existir um contêiner. A realidade diz que não existe nenhum. Portanto, preciso criar um novo contêiner para alcançar o estado desejado."
Esse comportamento de reconciliação é uma das propriedades operacionais mais importantes do Terraform. Ele compara o estado desejado, o estado registrado e a realidade atual para decidir qual correção é necessária.
Recuperar a infraestrutura
Essa é a capacidade de "autocorreção" da Infraestrutura como Código. Como nosso código define o Estado Desejado — um contêiner em execução —, o Terraform pode corrigir automaticamente qualquer desvio que ocorra.
Execute apply para corrigir o problema:
terraform apply
Digite yes quando for solicitado.
Quando a execução terminar, verifique o Docker novamente:
sudo docker ps
O contêiner voltou! Talvez ele tenha um novo ID e seja uma nova instância, mas, funcionalmente, sua infraestrutura voltou a ficar exatamente como foi definida no blueprint.
Resumo
Neste laboratório, você testemunhou o poder do estado.
Você aprendeu:
- O arquivo de estado: a memória do Terraform sobre o que existe (
terraform.tfstate). - Detecção de desvios: como o Terraform percebe quando algo muda sem que ele seja informado, como em uma exclusão manual.
- Autocorreção: como
terraform applyrestaura automaticamente os recursos ausentes para que correspondam ao seu código.
É por isso que o Terraform é confiável para gerenciar infraestruturas críticas. Mesmo quando ocorrem desastres, o Terraform ajuda você a retornar rapidamente a um estado conhecido e íntegro.



