Asigna a cada entorno su propio estado

AWSBeginner
Practicar Ahora

Introducción

Una configuración raíz de trabajo de vista previa selecciona el estado del entorno equivocado, aunque ambos entornos y sus objetos de estado válidos ya existen. Establece la relación correcta entre la configuración raíz y la clave, y realiza un cambio exclusivo de vista previa sin perjudicar a desarrollo.

Necesitas conocer los módulos locales, el estado remoto en S3 y los conceptos de bloqueo nativo de las unidades anteriores. Este entorno nuevo e independiente incluye ambos almacenes de informes y ambos estados; no necesitas una VM anterior ni una cuenta personal de AWS.

Relación con las certificaciones

Certificación Tarea del examen Práctica
CloudOps Engineer – Associate (SOA-C03) Tarea 3.1, habilidad 3.1.6 Práctica básica de Terraform: mantener infraestructura mediante cambios revisados en la configuración y el estado, conservando los recursos en funcionamiento.

Vista general del laboratorio

Diagrama conceptual: la tarea de mantenimiento conserva la relación entre la configuración, el estado y el almacenamiento de informes existente.

Identifica cada entorno antes de realizar cambios

En este paso, distingue dos entornos de dos copias de un mismo entorno. Cada configuración raíz siguiente tiene sus propias variables y su propio bucket de informes existente. Ambos estados remotos válidos ya existen en el backend con control de versiones environment-team-state.

cd /home/labex/project/environment-states
cat dev/terraform.tfvars
cat preview/terraform.tfvars

Las entradas indican los nombres isolated-dev-reports e isolated-preview-reports. Un directorio raíz o un archivo de variables no aísla automáticamente el estado: el bucket y la clave del backend seleccionan la correspondencia que utilizará Terraform.

Inspecciona el recurso seleccionado por la configuración raíz de vista previa:

terraform -chdir=preview state show aws_s3_bucket.reports

Actualmente muestra el ID del bucket de dev, aunque las entradas de vista previa describen otro bucket. Inspecciona su selección actual de backend:

cat preview/environment.s3.tfbackend

El backend almacenado en caché y el archivo seleccionan environments/dev.tfstate. Las claves previstas ya existen por separado:

aws s3api \
  list-objects-v2 \
  --bucket environment-team-state \
  --prefix environments/

Confirma que existen tanto environments/dev.tfstate como environments/preview.tfstate. AWS View también muestra ambos almacenes de informes; despliega sus objetos report.txt para ver los datos originales diferentes.

Inspecciona el plan inseguro de vista previa sin aplicarlo:

terraform -chdir=preview plan

Intenta conciliar las entradas de vista previa con la correspondencia de desarrollo y puede proponer sustituir el bucket equivocado. No lo apliques. Un valor de variable diferente no es una instrucción para asumir la gestión del estado de otro entorno.

Selecciona el estado existente de vista previa sin copiar el estado

En este paso, vuelve a vincular la configuración raíz de vista previa con su estado ya válido. La migración copia una correspondencia actual a otro backend. La reconfiguración descarta la selección de backend almacenada en caché e inicializa el backend existente solicitado sin copiar la correspondencia anterior.

Mantén sin cambios el archivo de desarrollo. Corrige el bucket y la clave elegidos para vista previa:

cat > preview/environment.s3.tfbackend <<'HCL'
bucket       = "environment-team-state"
key          = "environments/preview.tfstate"
region       = "us-east-1"
use_lockfile = true
HCL

Inicializa esa clave existente con -reconfigure. El archivo de conexión suministrado sigue estando separado de tu selección de entorno:

terraform -chdir=preview init \
  -reconfigure \
  -backend-config=backend-connection.hcl \
  -backend-config=environment.s3.tfbackend

No uses aquí -migrate-state ni -force-copy. Copiar el estado de desarrollo seleccionado en la clave válida de vista previa sobrescribiría el registro de gestión de vista previa, en lugar de seleccionarlo.

terraform -chdir=preview state show aws_s3_bucket.reports
terraform -chdir=preview plan

Debes ver el ID isolated-preview-reports y No changes. Comprueba desarrollo de forma independiente:

terraform -chdir=dev state show aws_s3_bucket.reports
terraform -chdir=dev plan

Desarrollo sigue seleccionando isolated-dev-reports, también con No changes. Ambas claves válidas y ambos informes originales deben permanecer intactos; esto es selección de entorno, no recuperación de un estado dañado.

Demuestra que un cambio de vista previa se limita a vista previa

En este paso, cambia únicamente la revisión de vista previa después de establecer su vinculación correcta. terraform.tfvars proporciona valores para las variables declaradas de esa configuración raíz; el código de configuración y la dirección del recurso pueden ser los mismos en los distintos entornos.

cat > preview/terraform.tfvars <<'HCL'
bucket_name = "isolated-preview-reports"
environment = "preview"
revision = "two"
HCL

Revisa el plan de vista previa:

terraform -chdir=preview plan -out=preview.tfplan

Debes ver 0 to add, 1 to change, 0 to destroy, afectando únicamente a la etiqueta de revisión de vista previa. Aplica el plan guardado desde esa misma configuración raíz:

terraform -chdir=preview apply preview.tfplan

Inspecciona las etiquetas actuales de cada entorno:

aws s3api \
  get-bucket-tagging \
  --bucket isolated-preview-reports

Vista previa debe tener Environment=preview y Revision=two.

aws s3api \
  get-bucket-tagging \
  --bucket isolated-dev-reports

Desarrollo debe seguir teniendo Environment=dev y Revision=one. Lee ambos informes originales:

aws s3 \
  cp s3://isolated-preview-reports/report.txt -
aws s3 \
  cp s3://isolated-dev-reports/report.txt -

Debes ver preview daily report y dev daily report. La comprobación en segundo plano también compara los bytes originales del estado de desarrollo, las versiones de ambos objetos y las correspondencias de recursos de las dos claves del backend.

terraform -chdir=preview plan
terraform -chdir=dev plan

Ambas configuraciones raíz deben indicar No changes. Conserva ambos almacenes de informes y su backend para sus propietarios. Los nombres de directorio, las claves de for_each y las variables de Terraform no sustituyen el aislamiento explícito del estado; otra copia de trabajo de desarrollo debe seleccionar intencionadamente la misma clave de desarrollo, mientras que vista previa debe seleccionar su propia clave.

Resumen

Has distinguido las copias de trabajo de los entornos, seleccionado un estado existente mediante la reconfiguración del backend y demostrado que una actualización exclusiva de vista previa deja sin cambios los recursos, los datos y el estado de desarrollo.