Introdução
Dois responsáveis pela manutenção têm cópias de trabalho do mesmo ambiente. Observe um processo efetivo de gravação no estado compartilhado, um plano concorrente rejeitado pelo bloqueio nativo desse processo e o trabalho bem-sucedido a partir do outro diretório após a liberação normal.
Você precisa conhecer o estado remoto no S3 e os planos e aplicações comuns do Terraform. Este novo ambiente fornece as duas cópias de trabalho inicializadas, uma alteração controlada com duração definida, armazenamento de relatórios e uma referência financeira; não é necessária uma VM anterior nem uma conta pessoal da AWS.
Relação com certificações
| Certificação | Tarefa do exame | Prática |
|---|---|---|
| CloudOps Engineer – Associate (SOA-C03) | Tarefa 3.1, Habilidade 3.1.6 | Prática básica com Terraform: manter a infraestrutura por meio de alterações revisadas na configuração e no estado, preservando os recursos em uso. |
Visão geral do laboratório

Identifique duas cópias de um ambiente
Nesta etapa, estabeleça que dois diretórios de trabalho gerenciam intencionalmente o mesmo ambiente. Eles não são implantações separadas de dev e preview: as duas configurações de backend selecionam reports/shared.tfstate em coordination-team-state.
cd /home/labex/project/shared-state-operators
cat operator-a/shared.s3.tfbackend
cat operator-b/shared.s3.tfbackend
Ambas usam use_lockfile = true. O Terraform cria um objeto de bloqueio S3 nativo junto desse estado enquanto um processo de gravação opera, para que outro processo de gravação não atue sobre um retrato conflitante do estado.
terraform -chdir=operator-a state show aws_s3_bucket.reports
terraform -chdir=operator-b state show aws_s3_bucket.reports
Ambos identificam coordinated-daily-reports. Leia seu relatório efetivo e mantenha a referência financeira inalterada:
aws s3 \
cp s3://coordinated-daily-reports/report.txt -
Espere Daily sales: 120 orders. Inspecione a alteração controlada fornecida:
cat operator-a/pending-change.tf
Apenas para este exercício, um recurso terraform_data pausa sua criação por 30 segundos por meio de local-exec. Essa pausa torna observável o bloqueio de um processo efetivo de gravação. Atualizações comuns de recursos também mantêm um bloqueio; uma espera artificial não é uma recomendação para implantações em produção. Esta alteração controlada de estado está presente nas duas configurações, mas ainda não foi aplicada.
Observe a disputa efetiva pelo bloqueio e sua liberação normal
Nesta etapa, execute um processo efetivo de gravação e um plano concorrente a partir do segundo diretório. Use todo o bloco a seguir como uma única operação para que as pausas de leitura não consumam a janela de observação.
& inicia o operador A em segundo plano; $! captura seu ID de processo. Sua saída vai para um log para que o erro do segundo operador possa ser lido. O laço com limite de tentativas aguarda o bloqueio S3 efetivo, em vez de presumir um tempo fixo de inicialização. A instrução if permite inspecionar a falha esperada do plano, e wait retorna o código de conclusão real do processo de gravação. Esses são dois processos independentes do Terraform, embora você os inicie em um único Terminal.
terraform -chdir=operator-a apply -auto-approve > /tmp/operator-a.log 2>&1 &
WRITER_PID=$!
echo "$WRITER_PID"
for attempt in $(seq 1 60); do
if aws s3api head-object \
--bucket coordination-team-state \
--key reports/shared.tfstate.tflock > /dev/null 2>&1; then
break
fi
sleep 1
done
aws s3api get-object \
--bucket coordination-team-state \
--key reports/shared.tfstate.tflock \
/tmp/current-lock.json
cat /tmp/current-lock.json
if terraform -chdir=operator-b plan -lock-timeout=0s; then
echo 'Unexpected: the competing plan acquired the lock.'
false
else
PLAN_EXIT=$?
echo "$PLAN_EXIT"
fi
wait "$WRITER_PID"
cat /tmp/operator-a.log
O plano concorrente deve encerrar com código 1 e Error acquiring the state lock. Um erro de autenticação ou conexão não demonstra disputa pelo bloqueio. As informações do bloqueio pertencem ao processo efetivo de gravação; enviar um arquivo com o nome do bloqueio não estabeleceria a coordenação entre processos de gravação.
O operador A deve concluir sua criação controlada com sucesso e liberar o bloqueio normalmente. Não desabilite o bloqueio, não exclua o bloqueio de um processo de gravação ativo nem use force-unlock para permitir que o segundo operador prossiga. No AWS View, os armazenamentos de relatórios permanecem disponíveis o tempo todo; o bloqueio coordena o gerenciamento, não o acesso de leitura aos relatórios.
Continue pela outra cópia de trabalho após a liberação
Nesta etapa, permita que o operador B obtenha acesso ao backend normalmente após a conclusão do processo de gravação. A segunda cópia de trabalho agora deve ler o estado compartilhado atualizado, em vez de criar outra cópia dos recursos de forma independente.
terraform -chdir=operator-b plan -lock-timeout=5s
Espere No changes. O mesmo comando que foi bloqueado durante a gravação agora pode adquirir e liberar o bloqueio normalmente.
Inspecione o estado concluído a partir dos dois diretórios:
terraform -chdir=operator-a state list
terraform -chdir=operator-b state list
Cada um lista aws_s3_bucket.reports e terraform_data.coordination. Eles representam o mesmo ambiente e o mesmo registro de gerenciamento compartilhado, não duas implantações.
aws s3 \
cp s3://coordinated-daily-reports/report.txt -
O texto original permanece disponível. Inspecione o histórico de versões do estado:
aws s3api \
list-object-versions \
--bucket coordination-team-state \
--prefix reports/shared.tfstate
O estado efetivo tem histórico, e nenhum .tflock ativo deve permanecer no inventário atual de objetos. Versões históricas do bloqueio ou marcadores de exclusão não são um bloqueio ativo de processo de gravação.
terraform -chdir=operator-a plan
Espere No changes aqui também. As verificações em segundo plano distinguem a disputa efetiva entre processos do Terraform de um bloqueio fornecido manualmente e verificam as versões originais dos relatórios, a liberação normal e o acesso posterior bem-sucedido. Deixe o armazenamento compartilhado e o backend para seus responsáveis.
Resumo
Você distinguiu duas cópias de trabalho de um ambiente de ambientes separados, observou a disputa efetiva pelo bloqueio nativo e continuou com segurança após a liberação normal pelo processo de gravação, sem excluir um bloqueio ativo.



