Entrevistas de Terraform focam no state, porque a maioria dos problemas reais vem dele: quem o detém, quem pode alterá-lo ao mesmo tempo e o que acontece quando a realidade se distancia dele. Depois vêm os módulos, os ambientes, as mudanças seguras e como você conduziria o Terraform em equipe.
Abaixo estão 25 perguntas com respostas. A HashiCorp mudou a licença do Terraform em 2023, e existe o fork comunitário OpenTofu, então mencione qual deles a equipe usa se o assunto surgir. As ideias centrais e os comandos são os mesmos para ambos.
Fundamentos
1. O que é Terraform, e o que é infraestrutura como código?
Terraform é uma ferramenta para definir infraestrutura em arquivos de configuração e aplicá-la por meio das APIs dos providers. Infraestrutura como código significa que a configuração é escrita, versionada, revisada e repetível, em vez de ser montada clicando em um console.
2. Qual é a diferença entre declarativo e imperativo?
O Terraform é declarativo: você descreve o estado final desejado, e o Terraform descobre os passos. Com um script imperativo, você mesmo escreve os passos, e executá-lo duas vezes pode quebrar as coisas.
3. Quais são os principais comandos do Terraform?
| Comando | O que ele faz |
|---|---|
| terraform init | Baixa providers e módulos, configura o backend |
| terraform validate | Verifica se a configuração é válida |
| terraform fmt | Formata os arquivos |
| terraform plan | Mostra o que vai mudar |
| terraform apply | Aplica as mudanças |
| terraform destroy | Remove os recursos gerenciados |
| terraform import | Traz um recurso existente para o gerenciamento |
| terraform state | Inspeciona e edita o state |
4. O que são providers, resources e data sources?
Um provider é um plugin que conversa com uma API como AWS, Azure ou Kubernetes. Um resource é algo que o Terraform cria e gerencia. Um data source lê informações sobre algo que já existe, como uma VPC existente ou a AMI mais recente.
5. O que são variables, outputs e locals?
Input variables parametrizam uma configuração. Outputs expõem valores, para uso na linha de comando ou por outros módulos. Locals são expressões nomeadas dentro de um módulo, usadas para evitar repetição.
State
6. O que é o arquivo de state do Terraform, e por que ele importa?
O state mapeia sua configuração para os recursos reais e armazena os atributos deles. O Terraform compara a configuração, o state e o mundo real para planejar as mudanças. Se você perder o state, o Terraform pode tentar recriar coisas que já existem. Ele também pode conter segredos, então trate-o como sensível.
7. Onde o state deve ser armazenado?
Em um backend remoto, não no notebook de uma pessoa, por exemplo S3 com uma tabela DynamoDB ou o lock nativo mais recente do S3, Azure Storage, Google Cloud Storage ou Terraform Cloud. Ative o versionamento no bucket, a criptografia e o acesso restrito.
8. O que é state locking?
Ele impede que duas pessoas ou pipelines apliquem ao mesmo tempo e corrompam o state. A maioria dos backends remotos oferece suporte a isso. Se uma execução travar, pode ser necessário liberar um lock obsoleto com terraform force-unlock, depois de verificar que ninguém ainda está aplicando.
9. O que é drift, e como você lida com ele?
Drift é quando a infraestrutura real difere do state, geralmente porque alguém a alterou manualmente. O terraform plan (ou plan -refresh-only) mostra isso. Decida se você reverte a mudança aplicando, ou se atualiza o código para corresponder.
10. Como você traz um recurso existente para o Terraform?
Escreva o bloco do recurso e depois execute terraform import <address> <id>, ou use um bloco import nas versões mais recentes. Rode plan em seguida e ajuste o código até que ele não mostre mudanças.
11. Como você divide o state entre ambientes ou equipes?
Use um state separado por ambiente e componente, por exemplo um para rede, um para cada aplicação e um por ambiente. Isso limita o raio de impacto e acelera os plans. Compartilhe valores usando outputs e data sources ou remote state.
Módulos e estrutura
12. O que é um módulo e quando você deve criar um?
Um módulo é um grupo reutilizável de recursos com entradas e saídas. Crie um quando você repete o mesmo padrão, como uma VPC ou um serviço, e quer uma única versão revisada. Mantenha os módulos pequenos e focados, com padrões sensatos, e versione-os.
13. Como você gerencia dev, staging e produção?
As opções mais comuns são diretórios ou repositórios separados, com seu próprio state e arquivos de variáveis, ou workspaces. Muitas equipes preferem um state separado por ambiente, já que os workspaces compartilham o mesmo código e facilitam aplicar no ambiente errado. Use os mesmos módulos com valores de variáveis diferentes.
14. O que são workspaces?
Estados nomeados dentro de um mesmo backend e configuração. São úteis para cópias temporárias da mesma configuração, como ambientes de teste por branch, mas não são uma separação robusta para produção.
15. Qual é a diferença entre count e for_each?
count cria um número de cópias indexadas por posição. for_each cria uma por item em um map ou set, com chave pelo nome. Prefira for_each, porque remover um item do meio de uma lista count desloca os índices e pode destruir e recriar recursos.
16. O que o depends_on faz?
Ele adiciona uma dependência explícita quando o Terraform não consegue enxergá-la pelas referências. Use com moderação, já que a maioria das dependências vem da referência aos atributos de outro recurso.
Mudanças seguras e operações
17. O que são lifecycle rules?
create_before_destroy faz a substituição primeiro, prevent_destroy bloqueia a exclusão, ignore_changes ignora atributos alterados fora do Terraform, e replace_triggered_by força a substituição quando outro recurso muda.
18. Como você lida com secrets no Terraform?
Não deixe eles hard-coded. Use um gerenciador de secrets ou variáveis de ambiente, marque variáveis e outputs como sensitive, e lembre-se de que os valores ainda podem acabar no state, então proteja o state. Evite passar secrets por arquivos de variáveis simples no controle de versão.
19. Como você revisa e aplica mudanças com segurança?
Rode plan em um pull request, revise a saída do plan, exija aprovação e aplique a partir de um pipeline usando o plan salvo, para que o que foi revisado seja o que roda. Fique atento às linhas de destroy ou replace no plan.
20. Um plan mostra que vai destruir e recriar um banco de dados. O que você faz?
Pare e descubra o motivo. As causas comuns são um atributo imutável alterado, um recurso renomeado ou um módulo movido. Use blocos moved ou terraform state mv para corrigir mudanças de endereço, use ignore_changes ou prevent_destroy se for apropriado, e faça um backup antes de qualquer apply arriscado.
21. Como você renomeia ou move um recurso sem destruí-lo?
Use um bloco moved no código, ou terraform state mv para mudar o endereço dele no state. Depois rode o plan e confirme que não há destroy.
22. Como você fixa versões?
Use required_version para o Terraform e required_providers com restrições de versão, e faça commit do arquivo .terraform.lock.hcl para que todos usem as mesmas builds de provider. Faça upgrades de forma deliberada e leia o changelog.
Perguntas práticas e de cenário
23. O que são provisioners e você deve usá-los?
Provisioners rodam scripts em um recurso após a criação. São o último recurso, porque não são rastreados no state e as falhas são difíceis de tratar. Prefira cloud-init, imagens criadas com uma ferramenta como o Packer, ou gerenciamento de configuração.
24. Como você estruturaria o Terraform para uma equipe com vários ambientes?
"Um repositório para módulos compartilhados com releases versionadas, e um repositório live com um diretório por ambiente e componente. Cada um tem seu próprio state remoto com locking. Um pipeline roda fmt, validate e plan nos pull requests, exige aprovação e aplica no merge. O acesso é por credenciais de curta duração, e verificações de policy pegam mudanças arriscadas."
25. Alguém alterou um recurso no console e agora o Terraform quer revertê-lo. O que você faz?
Descubra por que a pessoa alterou. Se foi uma correção urgente, atualize o código para corresponder e aplique, para que a mudança seja mantida. Se foi um erro, aplique para revertê-la. Depois adicione controles, como restringir o acesso de escrita no console, para que isso não aconteça de novo.
Como se preparar
Crie um projeto pequeno com um backend remoto, um módulo e dois ambientes. Pratique um rename com um bloco moved, um import e uma correção de drift. Esteja pronto para explicar uma vez em que um plan te surpreendeu e o que você fez. Para tópicos relacionados de cloud, veja nosso guia de entrevista da AWS e guia de Kubernetes.
Fale suas respostas em voz alta, principalmente as perguntas sobre state, onde as explicações ficam confusas. Uma transcrição de entrevista simulada mostra onde você hesitou. Siga as regras da empresa sobre ferramentas de IA em qualquer entrevista ao vivo.
Pratique respostas de entrevista sobre Terraform com YesToTheOffer
Faça uma entrevista técnica simulada, explique estado e módulos em voz alta e revise sua transcrição depois. 30 minutos grátis, sem assinatura.



