← Terraform: planear alterações e operar infraestrutura
08 / 12 · 60 MIN

Condições, avisos e recuperação observada

Distingue condições conhecidas e adiadas e decide como recuperar uma aplicação parcial.

Definir o requisito e o momento da decisão

Uma release fictícia tem dois requisitos diferentes: a janela de mudança tem de estar aberta antes da criação e a aplicação tem de estar pronta antes de receber tráfego. O primeiro valor pode ser conhecido no plano; o segundo pode depender de uma observação posterior. Para cada requisito, regista a origem do valor, quando fica disponível, o comportamento em caso de falha e quem decide uma exceção. Esta tabela torna visível um erro comum: escolher um mecanismo pelo nome, sem verificar se bloqueia a ação pretendida. Os exercícios seguintes usam dados locais pending e ready; não fazem uma sondagem de saúde de um serviço real.

Testar uma precondição conhecida

No primeiro laboratório, a variável window_open tem default=false. O recurso terraform_data.gate inclui lifecycle com uma precondition cuja condition é var.window_open e cuja mensagem explica que a janela do exercício está fechada. O plan terminou com código 1 e não criou ficheiro de state. A observação mostra uma rejeição antes da criação, não um rollback. Num projeto, uma mensagem útil deve indicar o requisito e a ação de correção, sem revelar segredos. Se o valor necessário ainda fosse desconhecido, a equipa teria de registar a avaliação adiada; não poderia classificar o requisito como cumprido só porque a fase de planeamento terminou.

Ler um resultado ainda desconhecido

No segundo laboratório, terraform_data.producer recebe input="pending" e a postcondition exige self.output == "ready". Um consumer usa producer.output. Antes da primeira criação, o plano JSON mostrou output em after_unknown; o plano foi guardado com sucesso. O relatório da equipa deve escrever “pendente de avaliação”, não “aprovado” nem “ausente”. Esta distinção interessa a quem produz dashboards a partir do JSON: ler apenas after perde informação. Pede ao formando que desenhe a dependência producer→consumer e identifique a primeira fase em que a comparação pode ser decidida. O valor configurado como input e o output ainda calculado têm papéis diferentes no plano observado.

Inspecionar o que ficou depois da falha

Ao aplicar o plano guardado, a postcondition falhou e o comando terminou com código 1. O state continha producer com output=pending; consumer não tinha sido criado. Assim, a falha bloqueou o dependente e deixou uma alteração anterior persistente. Num incidente real, conserva logs, contexto da execução e observação atual antes de retomar. Confirma recursos e associações, identifica a causa do requisito falhado e revê o novo plano completo. Restaurar um state antigo não desfaz infraestrutura. Também não convém remover a condição para obter um resultado verde sem tratar a exigência que ela representa. O gestor deve comunicar o estado parcial e a próxima decisão, em vez de prometer uma reversão que não observou.

Separar aviso de autorização de promoção

O terceiro laboratório usa um check que compara signal.output com ready. O recurso recebeu pending; o apply terminou com código 0, apresentou aviso de falha da assertion e deixou o recurso no state. Isto permite uma pergunta de operação: a regra do exercício exige ready=true antes de abrir tráfego; que parte da pipeline aplica essa regra? Um aviso guardado num log não é esse controlo. Mantém a promoção pendente e obtém a evidência necessária ou uma exceção autorizada quando a política a permitir. Um check local também descreve uma observação naquele momento. Um resultado de manhã não comprova a situação à tarde sem nova observação ou monitorização efetivamente configurada.

Exercício de passagem à operação e resumo

Entrega ao colega três registos: precondition conhecida com plan=1 e sem criação; postcondition adiada com apply=1 e produtor persistente; check falso com apply=0 e aviso. Pede-lhe que explique o que aconteceu, o que ainda falta e quem deve decidir o próximo passo. O runner local guarda estas observações, a versão e o hash do artefacto em evidence.json. Os resultados não validam providers cloud, importação, locking remoto ou recuperação de bases de dados. Antes de transportar o padrão para uma aplicação real, acrescenta esses testes no ambiente autorizado. Resumo: desconhecido não é aprovado; falha não garante reversão; sucesso do comando não substitui aceitação funcional. Relaciona esta aula com planos, segredos, observabilidade e incidentes.

NA PRÁTICA

Plan=0 com output desconhecido; apply=1 após criar producer; consumer bloqueado pela postcondition.

Armadilhas comuns

Unknown como aprovado; erro como rollback; check como bloqueio; log antigo como prontidão atual.

Tópicos relacionados: Planos e validação · Módulos e identidade · Adoção e recuperação

Leva esta ideia contigo

Escolhe o controlo pela ação e pelo momento em que a condição pode ser avaliada.

Criar conta

Referência: Validate your configuration · Terraform v1.16 concepts; official documentation consulted 2026-09-30; provider and backend capabilities must be confirmed

Terraform é uma marca comercial da HashiCorp, Inc., uma empresa IBM. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por HashiCorp. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.