Estado de Terraform en Azure Storage

El estado de Terraform se usa para conciliar los recursos implementados con configuraciones de Terraform. El estado permite que Terraform sepa qué recursos de Azure debe agregar, actualizar o eliminar.

De forma predeterminada, el estado de Terraform se almacena localmente, lo que no es ideal por los siguientes motivos:

  • El estado local no funciona bien en un equipo ni en un entorno de colaboración.
  • El estado de Terraform puede incluir información confidencial.
  • Almacenar el estado localmente aumenta la posibilidad de eliminación accidental.

En este artículo aprenderá a:

  • Creación de una cuenta de Azure Storage
  • Use Azure Storage para almacenar el estado de Terraform.
  • Descripción del bloqueo de estado
  • Descripción del cifrado en reposo

1. Configurar su entorno

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

2. Configuración de la cuenta de almacenamiento de estado remota

Para poder usar Azure Storage como back-end, es preciso crear antes una cuenta de almacenamiento.

Ejecute los comandos o la configuración siguientes para crear una cuenta de almacenamiento y un contenedor de Azure:

#!/bin/bash

RESOURCE_GROUP_NAME=tfstate
STORAGE_ACCOUNT_NAME=tfstate$RANDOM
CONTAINER_NAME=tfstate

# Create resource group
az group create --name $RESOURCE_GROUP_NAME --location eastus

# Create storage account
az storage account create --resource-group $RESOURCE_GROUP_NAME --name $STORAGE_ACCOUNT_NAME --sku Standard_LRS --encryption-services blob

# Create blob container
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME

Puntos clave:

  • Se permite el acceso público a la cuenta de almacenamiento de Azure para almacenar el estado de Terraform.
  • Las cuentas de Azure Storage requieren un nombre único global. Para más información sobre la solución de problemas de nombres de cuenta de almacenamiento, consulte Resolución de errores de nombres de cuenta de almacenamiento.

3. Configuración del estado del back-end de Terraform

Para configurar el estado de back-end, necesita la siguiente información de Almacenamiento de Azure:

  • storage_account_name: nombre de la cuenta de Azure Storage.
  • container_name: nombre del contenedor de blobs.
  • key: nombre del archivo de almacenamiento de estados que se va a crear.
  • access_key: clave de acceso de almacenamiento.

Cada uno de estos valores se puede especificar en el archivo de configuración de Terraform o en la línea de comandos. Se recomienda usar una variable de entorno para el valor access_key. El uso de una variable de entorno evita que la clave se escriba en el disco.

Ejecute los siguientes comandos para obtener la clave de acceso de almacenamiento y almacenarla como una variable de entorno:

ACCOUNT_KEY=$(az storage account keys list --resource-group $RESOURCE_GROUP_NAME --account-name $STORAGE_ACCOUNT_NAME --query '[0].value' -o tsv)
export ARM_ACCESS_KEY=$ACCOUNT_KEY

Puntos clave:

  • Para proteger aún más la clave de acceso de la cuenta de Azure Storage, almacénela en Azure Key Vault. A continuación, se puede establecer la variable de entorno mediante el uso de un comando similar al siguiente. Para más información sobre Azure Key Vault, consulte la documentación de Azure Key Vault.

    export ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault --query value -o tsv)
    

Cree una configuración de Terraform con un bloque de configuración backend.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=2.46.0"
    }
  }
    backend "azurerm" {
        resource_group_name  = "tfstate"
        storage_account_name = "<storage_account_name>"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
    }

}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "state-demo-secure" {
  name     = "state-demo"
  location = "eastus"
}

Reemplace <storage_account_name> por el nombre de la cuenta de Azure Storage.

Ejecute el siguiente comando para inicializar la configuración:

terraform init

Ejecute el siguiente comando para ejecutar la configuración:

terraform apply

Ya puede encontrar el archivo de estado en Azure Storage Blob.

4. Descripción del bloqueo de estado

Los blobs de Azure Storage Blob se bloquean automáticamente antes de cualquier operación que escriba el estado. Este patrón evita operaciones de estado simultáneas que pueden causar daños.

Para más información, consulte el artículo acerca del bloqueo del estado en la documentación de Terraform.

El bloqueo se puede ver al examinar el blob desde Azure Portal, o cualquier otra herramienta de administración de Azure.

Blob de Azure con bloqueo

5. Descripción del cifrado en reposo

Los datos almacenados en un blob de Azure se cifran antes de enviarse. Si es necesario, Terraform recupera el estado del back-end y lo almacena en la memoria local. Con este patrón, el estado nunca se escribe en el disco local.

Para más información acerca del cifrado de Azure Storage, consulte Cifrado de Azure Storage para datos en reposo.

Solución de problemas de Terraform en Azure

Solución de problemas comunes al usar Terraform en Azure

Pasos siguientes