Introdução
Um diretório raiz de trabalho de preview seleciona o estado do ambiente errado, embora os dois ambientes e seus objetos de estado válidos já existam. Estabeleça a relação correta entre o diretório raiz e a chave e faça uma alteração apenas em preview, sem prejudicar dev.
Você precisa dos conceitos de módulos locais, estado remoto no S3 e bloqueio nativo das unidades anteriores. Este novo ambiente independente inclui os dois armazenamentos de relatórios e os dois estados; 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 cada ambiente antes de fazer alterações
Nesta etapa, diferencie dois ambientes de duas cópias de um ambiente. Cada diretório raiz abaixo tem suas próprias variáveis e um bucket de relatórios existente. Os dois estados remotos válidos já existem no backend com versionamento environment-team-state.
cd /home/labex/project/environment-states
cat dev/terraform.tfvars
cat preview/terraform.tfvars
As entradas especificam os nomes isolated-dev-reports e isolated-preview-reports. Um diretório raiz ou arquivo de variáveis não isola automaticamente o estado: o bucket e a chave do backend selecionam o mapeamento que o Terraform usará.
Inspecione o recurso selecionado pelo diretório raiz de preview:
terraform -chdir=preview state show aws_s3_bucket.reports
Atualmente, ele informa o ID do bucket de dev, embora as entradas de preview descrevam outro bucket. Inspecione sua escolha atual de backend:
cat preview/environment.s3.tfbackend
O backend em cache e o arquivo selecionam environments/dev.tfstate. As chaves pretendidas já existem separadamente:
aws s3api \
list-objects-v2 \
--bucket environment-team-state \
--prefix environments/
Confirme que tanto environments/dev.tfstate quanto environments/preview.tfstate existem. O AWS View também mostra os dois armazenamentos de relatórios; expanda seus objetos report.txt para ver os dados originais distintos.
Inspecione o plano inseguro de preview sem aplicá-lo:
terraform -chdir=preview plan
Ele tenta conciliar as entradas de preview com o mapeamento de dev e pode propor substituir o bucket errado. Não o aplique. Um valor de variável diferente não é uma instrução para assumir o gerenciamento do estado de outro ambiente.
Selecione o estado existente de preview sem copiar o estado
Nesta etapa, vincule novamente o diretório raiz de preview ao seu estado já válido. A migração copia um mapeamento atual para um backend diferente. A reconfiguração descarta a escolha de backend em cache e inicializa o backend existente solicitado sem copiar o mapeamento antigo.
Mantenha o arquivo de dev inalterado. Corrija a escolha de bucket/chave de preview:
cat > preview/environment.s3.tfbackend <<'HCL'
bucket = "environment-team-state"
key = "environments/preview.tfstate"
region = "us-east-1"
use_lockfile = true
HCL
Inicialize essa chave existente com -reconfigure. O arquivo de conexão fornecido permanece separado da seleção de ambiente:
terraform -chdir=preview init \
-reconfigure \
-backend-config=backend-connection.hcl \
-backend-config=environment.s3.tfbackend
Não use -migrate-state nem -force-copy aqui. Copiar o estado de dev selecionado para a chave válida de preview sobrescreveria o registro de gerenciamento de preview, em vez de selecioná-lo.
terraform -chdir=preview state show aws_s3_bucket.reports
terraform -chdir=preview plan
Espere o ID isolated-preview-reports e No changes. Verifique dev de forma independente:
terraform -chdir=dev state show aws_s3_bucket.reports
terraform -chdir=dev plan
Dev continua selecionando isolated-dev-reports, também com No changes. As duas chaves válidas e os dois relatórios originais devem permanecer intactos; trata-se de seleção de ambiente, não de recuperação de estado danificado.
Comprove que uma alteração em preview fica em preview
Nesta etapa, altere apenas a revisão de preview depois de estabelecer seu vínculo correto. terraform.tfvars fornece valores para as variáveis declaradas desse diretório raiz; a configuração-fonte e o endereço de recurso podem permanecer iguais entre ambientes.
cat > preview/terraform.tfvars <<'HCL'
bucket_name = "isolated-preview-reports"
environment = "preview"
revision = "two"
HCL
Revise o plano de preview:
terraform -chdir=preview plan -out=preview.tfplan
Espere 0 to add, 1 to change, 0 to destroy, afetando apenas a tag de revisão de preview. Aplique o plano salvo a partir desse mesmo diretório raiz:
terraform -chdir=preview apply preview.tfplan
Inspecione as tags atuais de cada ambiente:
aws s3api \
get-bucket-tagging \
--bucket isolated-preview-reports
Preview deve ter Environment=preview e Revision=two.
aws s3api \
get-bucket-tagging \
--bucket isolated-dev-reports
Dev ainda deve ter Environment=dev e Revision=one. Leia os dois relatórios originais:
aws s3 \
cp s3://isolated-preview-reports/report.txt -
aws s3 \
cp s3://isolated-dev-reports/report.txt -
Espere preview daily report e dev daily report. A verificação em segundo plano também compara os bytes originais do estado de dev, as duas versões dos objetos e os mapeamentos de recursos nas duas chaves do backend.
terraform -chdir=preview plan
terraform -chdir=dev plan
Os dois diretórios raiz devem informar No changes. Mantenha os dois armazenamentos de relatórios e seu backend para seus responsáveis. Nomes de diretórios, chaves de for_each e variáveis do Terraform não substituem o isolamento explícito de estado; outra cópia de trabalho de dev deve selecionar intencionalmente a mesma chave de dev, enquanto preview deve selecionar sua própria chave.
Resumo
Você distinguiu cópias de trabalho de ambientes, selecionou um estado existente com a reconfiguração do backend e comprovou que uma atualização apenas em preview manteve os recursos, os dados e o estado de dev inalterados.



