Dê a cada ambiente seu próprio estado

AWSBeginner
Pratique Agora

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

Diagrama conceitual: a tarefa de manutenção preserva a relação entre a configuração, o estado e o armazenamento de relatórios existente.

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.