← tópicos

Específicos · Infraestrutura em TI

IaC: declarativo × imperativo, idempotência, imutável, Terraform (plan/apply, state)

Se o ambiente ainda precisa de um ajuste manual depois que o código rodou, não é IaC — a promessa do modelo é justamente que não sobre nada para a mão.

Altíssima15 itens no tópico

A ideia que organiza o assunto

Todo ambiente administrado à mão tende ao mesmo fim: o servidor que ninguém sabe recriar. Ele foi instalado há cinco anos, recebeu ajustes de três pessoas diferentes, e a única documentação do que há dentro dele é ele mesmo. Quando cai, não se restaura — reconstrói-se por tentativa e erro.

A infraestrutura como código responde com uma troca simples e radical: o ambiente deixa de ser um lugar e passa a ser um arquivo. Rede, sub-rede, balanceador, máquina virtual, regra de firewall e serviço são descritos em arquivos de definição legíveis por máquina, e é a execução desses arquivos que cria o ambiente — não a configuração de hardware físico, não a ferramenta interativa, não o comando digitado por alguém às duas da manhã.

Tudo o mais é consequência. Se o ambiente é arquivo, ele entra no controle de versão, com histórico, revisão por pares e retorno a um estado anterior conhecido. Se ele é criado por execução, é reproduzível: o mesmo código produz o mesmo ambiente em desenvolvimento, homologação e produção. E se reconstruir é barato, a infraestrutura se torna imutável — não se remenda a máquina, troca-se a máquina. Guardado esse encadeamento, quase todo item do tópico se responde sem decorar ferramenta.

Por que se usa (e o que custa)

Ganha-se reprodutibilidade, velocidade e auditoria no mesmo movimento: o ambiente inteiro sobe por execução de código, sem tarefa manual a cada implantação, e cada alteração fica registrada no repositório com autor, data e justificativa.

Paga-se em especialização. O modelo declarativo entrega o como à ferramenta, e isso exige alguém que domine essa ferramenta: a linguagem própria, o arquivo de estado, o comportamento de cada provedor e o que acontece quando o plano diverge da realidade. A dificuldade não desaparece — sai do comando manual e vira conhecimento concentrado. Essa é, aliás, a resposta que a banca já cobrou: a principal desvantagem da abordagem declarativa é precisar de administrador qualificado para configurar e gerenciar a solução.

Como funciona

Declarativo × imperativo. Na abordagem declarativa (também chamada funcional), escreve-se o estado final: três máquinas deste tipo, nesta sub-rede, atrás deste balanceador. A ferramenta compara o que foi declarado com o que existe e calcula sozinha o que criar, alterar ou destruir, e em que ordem. Na imperativa, escreve-se o caminho: os comandos específicos, na sequência apropriada, até chegar ao resultado. O primeiro modelo responde o quê; o segundo, como.

Idempotência. É a propriedade que torna o modelo utilizável: executar o mesmo arquivo dez vezes produz o mesmo resultado de executá-lo uma vez, porque a ferramenta só age sobre o que está diferente do declarado. Sem isso, reexecutar seria perigoso, e a automação viraria um roteiro de uso único. Registre, porém, que nenhum item medido deste tópico usa a palavra: ela está aqui porque sustenta o declarativo e pode ser cobrada amanhã, não porque já tenha decidido item algum.

Provisionar × configurar. São duas camadas do mesmo problema, e cada ferramenta mora em uma. O Terraform (ou o CloudFormation, na AWS) cria os recursos — máquinas, redes, balanceadores. O Ansible, o Puppet e o Chef configuram o que passa a existir dentro deles — pacotes, serviços, arquivos, usuários. Por serem funções diferentes, elas se encadeiam: é o arranjo mais comum do mercado, não uma incompatibilidade.

Provisionadores. Depois de criar um recurso, o Terraform pode rodar scripts dentro dele. O transporte segue o sistema operacional do destino: SSH para Linux, WinRM para Windows.

A esteira. IaC não é CI/CD, mas vive dentro dela: o arquivo de infraestrutura é versionado como qualquer código e aplicado por uma esteira automatizada. No GitLab, essa esteira é descrita no .gitlab-ci.yml, que por padrão fica na raiz do repositório e pode ser editado pelo editor de pipeline.

O que decide os itens

Declarativo × imperativo — o par que a banca mais troca de lugar:

declarativo (funcional)imperativo (procedural)
o que se escreveo estado final desejadoos comandos, na ordem apropriada
quem decide o caminhoa ferramentaquem escreveu
palavras típicaspropriedades, estado, desejadopassos, sequência, comandos, ordem
exemplosTerraform, CloudFormation, manifesto Kubernetesscript de shell, comandos de CLI

Imutável × mutável — o objetivo da IaC é infraestrutura imutável: não se altera o servidor existente, cria-se um novo a partir do código e substitui-se o antigo. Mutável descreve a administração manual que o modelo veio aposentar.

Quem faz o quê:

ferramentapapel
Terraform, CloudFormationprovisionamento de recursos, declarativo
Ansible, Puppet, Chefgerência de configuração dentro da máquina
GitLab CI, Jenkinsesteira que executa e valida
Gitcontrole de versão do que descreve o ambiente

IaC × integração contínua × entrega contínua — a IaC descreve o ambiente; a integração contínua integra o trabalho com frequência e automatiza construção, teste e validação a cada commit; a entrega contínua leva o artefato validado adiante. São camadas distintas da mesma esteira.

A definição canônica — cai quase palavra por palavra e costuma vir correta: gerenciar e provisionar data centers por meio de arquivos de definição legíveis por máquina, em vez de configuração de hardware físico ou de ferramentas de configuração interativas.

Como a CEBRASPE derruba você aqui

Medido sobre os 15 itens do tópico: 8 Certo e 7 Errado. Sete itens errados não produzem distribuição, e não há percentual honesto a extrair de uma base assim — o que vale é contar e nomear a forma. Contados, eles se dividem de um jeito que muda o modo de estudar: cinco dos sete se decidem sem que se conheça ferramenta nenhuma, e dois se decidem por um detalhe de ferramenta que nenhum conceito deduz.

Antes das famílias, duas advertências que a medição impõe. O tópico não é só IaC: dois dos quinze itens tratam de integração contínua e do editor de esteira do GitLab, e entraram aqui porque o enunciado juntava IaC, integração contínua e Terraform no mesmo bloco. E a idempotência, que dá nome ao tópico, não decide nenhum item — a palavra não aparece em item algum do corpus. Quem faz o trabalho dela nas provas é outro par: imutável × mutável.

Devolver o trabalho que o modelo existe para eliminar — 3 dos 7, a família dominante. Os três itens são a mesma jogada em três disfarces. O ajuste manual que sobreviveria à automação: “ainda é preciso fazer ajustes no gerenciamento de servidores e sistemas operacionais quando uma aplicação é criada ou implantada”. O servidor remendado, promovido a objetivo: “o principal objetivo (…) é implantar uma infraestrutura mutável, dinâmica”. E o passo a passo, assinado com o nome do modelo que o dispensa: a abordagem declarativa que seria “focada no modo como a infraestrutura deve ser alterada, definindo comandos específicos que devem ser executados, na ordem apropriada”. Nos três, o que a frase reintroduz é exatamente aquilo que a IaC foi criada para aposentar — a mão no servidor, a máquina que se altera no lugar, a sequência de comandos. A defesa é uma pergunta só: o que o item descreve é o mundo antes da IaC? Se for, é errado, qualquer que seja o rótulo. Ela vale, em particular, para as expressões ainda é preciso, apesar de e mesmo assim, que nos três casos introduzem a sobra manual.

O detalhe de ferramenta escondido num item conceitual — 2 dos 7. São os dois itens que não se resolvem por raciocínio, e por isso precisam ser decorados. O provisionamento por shell do Terraform que se conectaria “usando-se a ferramenta WinRM” — é SSH; WinRM é o lado Windows. E o .gitlab-ci.yml que estaria “na pasta de configuração do repositório” — fica na raiz. Guarde os dois pares: SSH/WinRM por sistema operacional, e arquivo de esteira na raiz do repositório.

A definição tomada de outro assunto — 1 dos 7. “A IaC é uma forma de disponibilizar códigos-fontes de atualização em código aberto para o usuário final” — o objeto está trocado: o objeto da IaC é a infraestrutura, e quem a consome é quem opera o ambiente, não o usuário final da aplicação. Ao julgar definição de sigla, confira o objeto antes do verbo.

Premissa verdadeira, conclusão oposta — 1 dos 7. “O Terraform e o Ansible possuem funcionalidades diferentes e, por esse motivo, não podem ser usados em conjunto” — a diferença de função é justamente o que os torna complementares. Sempre que o item oferecer um por esse motivo, julgue a causa e a conclusão separadamente.

E o aviso inverso, que a contagem sustenta: a definição genérica costuma estar certa. Sete dos oito itens Certos são definição pura, sem número e sem absoluto. A definição canônica — gerenciar e provisionar data centers por arquivos de definição legíveis por máquina, em vez de configuração manual — apareceu duas vezes, em concursos diferentes e com um ano de distância, quase palavra por palavra, e foi Certo nas duas. Não procure pegadinha no item curto e conceitual: neste tópico a banca erra pelo detalhe técnico trocado, não pela afirmação vaga.

Erros clássicos

Confundir IaC com CI/CD. IaC descreve o ambiente; a esteira executa e valida mudanças. Um item que faça a IaC compilar e testar código está trocando as camadas.

Achar que declarativo significa “sem ordem”. A ordem existe — quem a calcula é a ferramenta, a partir das dependências entre os recursos declarados.

Ler idempotência como “executar uma vez só”. É o contrário: é poder executar quantas vezes quiser, com o mesmo resultado, porque só o que estiver diferente do declarado será alterado.

Misturar provisionamento com gerência de configuração. Criar a máquina e configurar o que roda dentro dela são papéis distintos, e quase sempre de ferramentas distintas.

Reduzir IaC a criar máquinas virtuais. Rede, sub-rede, balanceador, firewall e serviço gerenciado entram no mesmo código, com as dependências resolvidas pela ferramenta.

Praticar15 itens