Apresentamos 28 questões e respostas sobre Terraform, ideais para entrevistas, complementadas por uma lista e explicação detalhada dos comandos mais relevantes frequentemente abordados nesses processos seletivos.
O crescimento da adoção de tecnologias em nuvem impulsionou diversas oportunidades no universo DevOps. No futuro próximo, o conhecimento de nuvem e infraestrutura como código, juntamente com ferramentas de IAC, se tornará um pré-requisito para profissionais de DevOps e um tópico comum em entrevistas de emprego.
O que é o Terraform?
Terraform se destaca como uma das ferramentas de Infraestrutura como Código (IAC) mais populares, amplamente utilizada por engenheiros de nuvem. Ela possibilita a definição de recursos tanto na nuvem quanto em ambientes locais por meio de arquivos de configuração legíveis, permitindo o provisionamento desses recursos de forma programática. Uma característica marcante do Terraform é sua versatilidade, permitindo a operação em múltiplas plataformas de nuvem simultaneamente, diferentemente de outras ferramentas de IAC que são limitadas a um único provedor.
Para aqueles que se questionam sobre as tecnologias suportadas pelo Terraform, apresentamos uma breve lista:
Se você busca avançar na carreira como Engenheiro DevOps, Arquiteto de Nuvem, Desenvolvedor ou Administrador, o domínio do Terraform será essencial para enfrentar os desafios das entrevistas. Compilamos uma lista das principais perguntas sobre Terraform que irão fortalecer seu conhecimento nessa ferramenta.
Perguntas e Respostas Gerais em Entrevistas sobre Terraform
#1. Como você define o Terraform?
Terraform é uma ferramenta de IAC de código aberto, criada pela HashiCorp. Sua função é construir, atualizar, remover e gerenciar o versionamento da sua infraestrutura em diversas plataformas de nuvem.
#2. Quais as vantagens de escolher o Terraform para DevOps?
A utilização do Terraform para o provisionamento de infraestrutura minimiza a possibilidade de erros humanos, otimizando a qualidade, consistência e eficiência da infraestrutura, tanto em nuvem quanto on-premises. O Terraform utiliza a linguagem HCL, similar ao JSON, o que facilita seu aprendizado e utilização. Ao contrário de outras ferramentas de IAC oferecidas por provedores de nuvem, como o CloudFormation da AWS, o Terraform opera em múltiplas plataformas simultaneamente. Isso elimina a necessidade de aprender diversas ferramentas de IAC e promove a colaboração.
#3. Como o Terraform opera?
O Terraform se conecta com as APIs de plataformas de nuvem através de plugins, conhecidos como provedores Terraform, para provisionar recursos. O fluxo de trabalho do Terraform para o usuário final consiste em três etapas:
Escrita: Definir a infraestrutura como código.
Planejamento: Visualizar as alterações que o Terraform executará antes da aplicação.
Aplicação: Provisionar a infraestrutura e aplicar as alterações.
#4. O que é Terraform Cloud?
O Terraform Cloud é um ambiente remoto criado especificamente para o fluxo de trabalho do Terraform, oferecendo recursos como workspaces e bloqueio de estado, facilitando a colaboração entre equipes.
#5. Qual o conceito de Estado no Terraform?
Como ferramenta de IAC, o Terraform precisa manter o controle do estado atual das configurações e da infraestrutura que gerencia. Essas informações são armazenadas em um arquivo chamado arquivo de estado.
#6. Qual a importância do Estado do Terraform?
O Estado do Terraform permite que a ferramenta mapeie os recursos reais com sua configuração, acompanhe os metadados e otimize o desempenho ao planejar alterações em infraestruturas complexas. É um componente fundamental do Terraform.
#7. O que é Terraform Backend?
O backend do Terraform é onde os snapshots de estado da ferramenta são armazenados. O Terraform utiliza um backend local por padrão, que armazena o estado como um arquivo local em seu disco. Todos os demais backends suportados são serviços de armazenamento remoto.
#8. O que é um provedor no Terraform?
Os provedores no Terraform são plugins que permitem a comunicação da ferramenta com provedores de nuvem, SaaS e outras APIs. Por exemplo, para provisionar infraestrutura na AWS, é necessário declarar um provedor AWS nos arquivos de configuração.
#9. Quem mantém os provedores do Terraform?
Os provedores são distribuídos separadamente do Terraform. Qualquer usuário pode desenvolver seus próprios provedores. Há também provedores padrão, mantidos pela Hashicorp.
#10. O que é Sentinel?
Sentinel é uma ferramenta de política como código, utilizada para aplicar configurações padrão aos recursos provisionados pelo Terraform, sendo útil para organizações que buscam conformidade e governança.
#11. O que são módulos no Terraform?
Um módulo Terraform é um contêiner para múltiplos recursos que são utilizados em conjunto para provisionar e configurar recursos. Por exemplo, é possível criar um módulo VPC para sua organização, que provisiona uma VPC padrão e outros recursos, como sub-redes e gateways de Internet. Módulos podem ser compartilhados publicamente através do registro de módulo público, ou de forma privada através do registro de módulo privado.
#12. Qual a vantagem de utilizar módulos no Terraform?
Módulos do Terraform permitem criar abstração lógica sobre um conjunto de recursos. Eles possibilitam a manutenção e reutilização de configurações de recursos padrão, além de serem versionados e compartilhados com equipes, garantindo o provisionamento padrão de recursos.
#13. O que é o Registro de Módulo Privado?
O registro de módulo privado, um recurso do Terraform Cloud, permite que módulos do Terraform sejam compartilhados em toda a organização.
Perguntas e Respostas Avançadas em Entrevistas sobre Terraform
#14. Como é possível exportar dados de um módulo para outro?
Dados podem ser exportados de um módulo através da definição de blocos de saída nos arquivos de configuração do módulo. Esses dados são então transferidos como um parâmetro para o módulo de destino.
#13. Como definir dependências no Terraform?
O Terraform possui um sistema de gerenciamento de dependências integrado, com dois tipos de dependências: implícitas e explícitas.
Dependências implícitas são detectadas automaticamente pelo Terraform, ocorrendo quando a saída de um “recurso A” é utilizada no “recurso B”. O Terraform identifica que o “recurso B” deve ser criado após o “recurso A”.
Dependências explícitas são definidas em situações onde dois recursos dependem internamente um do outro, mas não compartilham saídas. Isso é feito através do parâmetro `depends_on` no bloco de configuração.
#14. O que são provisionadores no Terraform?
Provisionadores são recursos do Terraform que executam scripts durante a criação ou remoção de recursos. Existem dois tipos de provisionadores:
- `local-exec`: executa um script na máquina onde o Terraform é executado.
- `remote-exec`: executa um script em um recurso remoto após sua criação.
Os provisionadores devem ser utilizados como último recurso no Terraform.
#15. O que é o bloco de dados externo no Terraform?
Semelhante ao provisionador `local-exec`, o bloco de dados externo executa scripts em máquinas que rodam o Terraform. A diferença é que scripts no bloco de dados externo podem retornar dados no formato JSON, enquanto provisionadores não retornam saídas. É importante destacar que blocos de dados externos devem ser um último recurso, evitados quando há alternativas melhores.
#16. Como dois usuários do Terraform Cloud podem criar infraestruturas diferentes no mesmo diretório?
Utilizando workspaces diferentes. Cada usuário executa o Terraform em um workspace separado, cada um com seu próprio arquivo de estado. Contanto que os recursos não se sobreponham, é possível provisionar duas infraestruturas diferentes utilizando o mesmo código.
#17. O que acontece quando vários engenheiros implantam infraestruturas usando o mesmo arquivo de estado?
O Terraform oferece o recurso “bloqueio de estado”, que impede que alterações no arquivo de estado durante uma execução causem corrupção no arquivo. Nem todos os backends do Terraform suportam bloqueio de estado, sendo importante escolher o backend certo se esse recurso for necessário.
#18. O que é um recurso nulo no Terraform?
Um recurso nulo do Terraform é executado como um bloco de recurso padrão, mas não cria nenhum recurso. Embora pareça incomum, pode ser útil em diversas situações para contornar limitações do Terraform.
#19. Como usar o mesmo provedor com configurações diferentes no Terraform?
Através do argumento `alias` no bloco do provedor.
#20. O que acontece ao executar `terraform apply` em um arquivo de configuração sem recursos?
O Terraform destruirá todos os recursos. Executar `terraform apply` com uma configuração vazia é equivalente a executar `terraform destroy`.
#21. O que ocorre se um recurso é criado com sucesso no Terraform, mas o provisionamento falha?
Nesse cenário, o recurso é marcado como corrompido, sendo possível recriá-lo através da reinicialização da execução do Terraform.
#22. Qual o valor da variável `TF_LOG` que oferece o log mais detalhado?
O valor `TRACE` é o mais detalhado e o padrão para a variável `TF_LOG`.
#23. Como importar recursos existentes para o gerenciamento do Terraform?
Através do comando `terraform import`.
#24. Qual comando exibe o plano de execução do Terraform?
O comando `terraform plan` gera o plano de execução das alterações que o Terraform fará na infraestrutura.
#25. Qual comando reconcilia o estado do Terraform com a infraestrutura real?
O comando `terraform apply -refresh-only` é utilizado para reconciliar o estado do Terraform com a infraestrutura real. É a alternativa ao comando `terraform refresh`, agora obsoleto.
#26. Qual comando alterna entre workspaces no Terraform Cloud?
O comando `terraform workspace select
#27. Qual comando valida a sintaxe dos arquivos de configuração do Terraform?
O comando `terraform validate` verifica se a configuração é sintaticamente válida e internamente consistente.
#28. Qual comando cria novos workspaces no Terraform Cloud?
O comando `terraform workspace new
Outros Comandos Importantes do Terraform para Entrevistas Técnicas
- `terraform init`: Inicializa backends remotos, baixa provedores e módulos remotos definidos na configuração.
- `terraform init -upgrade`: Atualiza os provedores existentes.
- `terraform plan`: Gera o plano de execução para criação ou atualização da infraestrutura.
- `terraform apply`: Cria ou atualiza a infraestrutura, solicitando confirmação do usuário.
- `terraform apply –auto-approve`: Cria ou atualiza a infraestrutura, sem solicitar confirmação.
- `terraform destroy`: Remove a infraestrutura, solicitando confirmação do usuário.
- `terraform destroy –auto-approve`: Remove a infraestrutura, sem solicitar confirmação.
- `terraform fmt`: Formata arquivos de configuração segundo o estilo canônico do HCP.
- `terraform fmt –recursive`: Formata arquivos de configuração, incluindo subdiretórios.
- `terraform show`: Exibe informações do arquivo de estado ou plano de forma legível.
Espero que as informações acima ajudem você a alcançar seu objetivo profissional no Terraform.