En este tutorial, aprenderás a almacenar el estado de Terraform en un segmento de Cloud Storage.
De forma predeterminada, Terraform almacena el estado
de forma local en un archivo llamado terraform.tfstate
. Esta configuración predeterminada puede dificultar el uso de Terraform a los equipos cuando varios usuarios ejecutan Terraform al mismo tiempo y cada máquina tiene su propia interpretación de la infraestructura actual.
Para evitar estos problemas, en esta página se explica cómo configurar un estado remoto que apunte a un segmento de Cloud Storage. El estado remoto es una función de los backends de Terraform.
Preparar el entorno
Clona el repositorio de GitHub que contiene ejemplos de Terraform:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
Cambia al directorio de trabajo:
cd terraform-docs-samples/storage/remote_terraform_backend_template
Revisar los archivos de Terraform
Revisa el archivo
main.tf
:cat main.tf
La salida es similar a la siguiente:
En este archivo se describen los siguientes recursos:
random_id
: se añade al nombre del segmento de Cloud Storage para asegurar que el nombre del segmento de Cloud Storage sea único.google_storage_bucket
: el segmento de Cloud Storage en el que se almacenará el archivo de estado. Este contenedor está configurado para tener las siguientes propiedades:force_destroy
se define comofalse
para asegurarse de que el segmento no se elimine si contiene objetos. De esta forma, te aseguras de que la información de estado del contenedor no se elimine por error.public_access_prevention
está configurado comoenforced
para asegurarse de que el contenido del segmento no se exponga accidentalmente al público.uniform_bucket_level_access
se define comotrue
para permitir el control del acceso al segmento y a su contenido mediante permisos de gestión de identidades y accesos en lugar de listas de control de acceso.versioning
está habilitado para asegurarse de que las versiones anteriores del estado se conserven en el contenedor.
local_file
: un archivo local. El contenido de este archivo indica a Terraform que use el segmento de Cloud Storage como backend remoto una vez que se haya creado el segmento.
Aprovisionar el segmento de Cloud Storage
Inicializa Terraform:
terraform init
Cuando ejecutas
terraform init
por primera vez, el segmento de Cloud Storage que has especificado en el archivomain.tf
aún no existe, por lo que Terraform inicializa un backend local para almacenar el estado en el sistema de archivos local.Aplica la configuración para aprovisionar los recursos descritos en el archivo
main.tf
:terraform apply
Cuando se te solicite, introduce
yes
.Cuando ejecutas
terraform apply
por primera vez, Terraform aprovisiona el segmento de Cloud Storage para almacenar el estado. También crea un archivo local. El contenido de este archivo indica a Terraform que use el segmento de Cloud Storage como backend remoto para almacenar el estado.
Migrar el estado a un segmento de Cloud Storage
Migra el estado de Terraform al backend remoto de Cloud Storage:
terraform init -migrate-state
Terraform detecta que ya tienes un archivo de estado localmente y te pide que migres el estado al nuevo segmento de Cloud Storage. Cuando se te solicite, introduce
yes
.
Después de ejecutar este comando, el estado de Terraform se almacena en el segmento de Cloud Storage. Terraform extrae el estado más reciente de este bucket antes de ejecutar un comando y envía el estado más reciente al bucket después de ejecutar un comando.