En este instructivo, aprenderás a almacenar el estado de Terraform en un bucket de Cloud Storage.
De forma predeterminada, Terraform almacena el estado de manera local en un archivo llamado terraform.tfstate
. Esta configuración predeterminada puede dificultar el uso de Terraform para los equipos cuando varios usuarios ejecutan Terraform al mismo tiempo y cada máquina tiene su propia comprensión de la infraestructura actual.
Para ayudarte a evitar esos problemas, en esta página, se muestra cómo configurar un estado remoto que apunte a un bucket de Cloud Storage. El estado remoto es una característica de los backends de Terraform.
Prepare el entorno
Clona el repositorio de GitHub que contiene las muestras 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
Revisa los archivos de Terraform
Revisa el archivo
main.tf
:cat main.tf
El resultado es similar al que se muestra a continuación:
En este archivo, se describen los siguientes recursos:
random_id
: Se agrega al nombre del bucket de Cloud Storage para garantizar que sea único.google_storage_bucket
: Es el bucket de Cloud Storage en el que se almacenará el archivo de estado. Este bucket está configurado para tener las siguientes propiedades:force_destroy
se establece enfalse
para garantizar que el bucket no se borre si contiene objetos. Esto garantiza que la información de estado del bucket no se borre por accidente.public_access_prevention
se establece enenforced
para garantizar que el contenido del bucket no se exponga al público por accidente.uniform_bucket_level_access
se establece entrue
para permitir el control del acceso al bucket y su contenido con permisos de IAM en lugar de listas de control de acceso.versioning
está habilitado para garantizar que las versiones anteriores del estado se conserven en el bucket.
local_file
: Es un archivo local. El contenido de este archivo le indica a Terraform que use el bucket de Cloud Storage como backend remoto una vez que se cree el bucket.
Aprovisiona el bucket de Cloud Storage
Inicializa Terraform mediante este comando:
terraform init
Cuando ejecutas
terraform init
por primera vez, el bucket de Cloud Storage que especificaste 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, ingresa
yes
.Cuando ejecutas
terraform apply
por primera vez, Terraform aprovisiona el bucket de Cloud Storage para almacenar el estado. También crea un archivo local; el contenido de este archivo le indica a Terraform que use el bucket de Cloud Storage como backend remoto para almacenar el estado.
Migra el estado al bucket de Cloud Storage
Migra el estado al backend remoto de Cloud Storage:
terraform init -migrate-state
Terraform detecta que ya tienes un archivo de estado de forma local y te solicita que migres el estado al nuevo bucket de Cloud Storage. Cuando se te solicite, ingresa
yes
.
Después de ejecutar este comando, el estado de Terraform se almacena en el bucket de Cloud Storage. Terraform extrae el estado más reciente de este bucket antes de ejecutar un comando y lo envía al bucket después de ejecutar un comando.