Terraform Cloudflare: Gestiona tu DNS como Código 2026

Terraform Cloudflare - gestion de DNS como codigo con IaC

Terraform Cloudflare es la combinación perfecta para gestionar tu DNS, tu CDN y tu seguridad perimetral como código, de forma versionada y reproducible. En lugar de hacer clic en el panel de Cloudflare cada vez que cambias un registro, defines toda tu configuración en ficheros .tf que revisas por pull request y aplicas con un comando. En esta guía crearás una zona, registros DNS y reglas con infraestructura como código.

En este artículo aprenderás a:

  • Configurar el proveedor Terraform Cloudflare con un token de API seguro.
  • Gestionar zonas y registros DNS de forma declarativa.
  • Automatizar reglas de página y seguridad como código.
  • Aplicar buenas prácticas de estado remoto y variables.

¿Qué es Terraform Cloudflare y por qué usarlo?

Terraform Cloudflare es el uso del proveedor oficial de Cloudflare para Terraform, que te permite administrar todos los recursos de tu cuenta —DNS, reglas de firewall, page rules, túneles y mucho más— mediante infraestructura como código. Cloudflare expone una API completa, y el proveedor la traduce a recursos HCL que Terraform crea, actualiza y destruye de forma idempotente.

Gestionar Cloudflare desde Terraform aporta ventajas que el panel web no ofrece:

  • Versionado: cada cambio de DNS queda registrado en Git, con autor, fecha y motivo.
  • Revisión: un pull request permite validar un cambio crítico antes de aplicarlo.
  • Reproducibilidad: replicas la misma configuración en varios dominios o entornos.
  • Automatización: integras los cambios de DNS en tus pipelines de CI/CD.

Este enfoque encaja con el resto de tu infraestructura como código. Si ya defines tu red con Terraform AWS VPC, tener también el DNS en Terraform Cloudflare cierra el círculo y evita configuraciones dispersas entre paneles.


Cómo funciona el proveedor Terraform Cloudflare

Antes de escribir código, conviene entender el modelo mental de Terraform Cloudflare. El proveedor actúa como traductor entre tu código HCL y la API de Cloudflare: cada recurso que declaras corresponde a un objeto real en tu cuenta, y Terraform se encarga de reconciliar el estado deseado con el estado real.

  • La zona: representa tu dominio dentro de Cloudflare y agrupa todos sus registros y ajustes.
  • Los recursos: registros DNS, reglas de página o ajustes de seguridad, cada uno como un bloque en tu código.
  • El estado (state): el fichero donde Terraform recuerda qué ha creado, para saber qué cambiar en cada aplicación.
  • El token de API: la credencial que autoriza al proveedor a actuar en tu nombre.

Comprender esta relación es clave para evitar el error más habitual: intentar crear con Terraform algo que ya existe en el panel. La solución, como veremos, es importar esos recursos al estado. Con este modelo claro, Terraform Cloudflare se vuelve predecible y seguro incluso sobre dominios en producción.


Requisitos previos para Terraform Cloudflare

Antes de escribir el primer recurso de Terraform Cloudflare, prepara lo básico. La configuración es ligera, pero la seguridad del token es clave.

  • Terraform 1.6 o superior (u OpenTofu) instalado.
  • Una cuenta de Cloudflare con un dominio ya añadido.
  • Un token de API con permisos de edición de DNS y zona.
  • El dominio delegado a los servidores de nombres de Cloudflare.

Para crear el token, ve al panel de Cloudflare, sección «My Profile → API Tokens», y usa la plantilla «Edit zone DNS». Concede solo los permisos imprescindibles: es el principio de mínimo privilegio aplicado a tu automatización.

Configurar el proveedor Terraform Cloudflare

Empezamos definiendo el proveedor. Fijar la versión garantiza despliegues reproducibles y evita sorpresas cuando el proveedor publique cambios incompatibles.

# provider.tf
terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.40"
    }
  }
}

provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

Nunca escribas el token directamente en el código. Lo declaramos como variable sensible en variables.tf y lo pasaremos por una variable de entorno, de modo que no acabe en Git.

# variables.tf
variable "cloudflare_api_token" {
  type      = string
  sensitive = true
}

variable "zone_name" {
  default = "tudominio.com"
}

Exporta el token en tu terminal antes de ejecutar Terraform. Al usar el prefijo TF_VAR_, Terraform lo recoge automáticamente sin exponerlo en ningún fichero.

export TF_VAR_cloudflare_api_token="tu-token-secreto"

⚠️ Advertencia de seguridad

Un token de API de Cloudflare puede modificar tu DNS y redirigir tu tráfico. Trátalo como una credencial crítica: usa permisos mínimos, nunca lo subas a Git y guárdalo en un gestor de secretos o en las variables protegidas de tu pipeline.

Gestionar zonas y registros DNS con Terraform Cloudflare

El corazón de Terraform Cloudflare es la gestión del DNS. Primero obtenemos la zona (tu dominio) mediante un data source, para no depender de identificadores escritos a mano.

# dns.tf
data "cloudflare_zone" "main" {
  name = var.zone_name
}

Con la zona localizada, creamos registros DNS. Este ejemplo define un registro A para el dominio raíz y un CNAME para el subdominio www, con el proxy naranja de Cloudflare activado para aprovechar su CDN y protección.

# dns.tf (continuación)
resource "cloudflare_record" "root" {
  zone_id = data.cloudflare_zone.main.id
  name    = "@"
  type    = "A"
  content = "203.0.113.10"
  proxied = true
  ttl     = 1
}

resource "cloudflare_record" "www" {
  zone_id = data.cloudflare_zone.main.id
  name    = "www"
  type    = "CNAME"
  content = var.zone_name
  proxied = true
  ttl     = 1
}

Fíjate en proxied = true: activa el proxy de Cloudflare, que oculta la IP de origen y añade su capa de caché y seguridad. Cuando el registro debe apuntar directo (por ejemplo, un registro MX de correo), se pone en false. Aplica los cambios y comprueba el plan antes de confirmar.

terraform init
terraform plan
terraform apply

Terraform te mostrará exactamente qué registros va a crear antes de tocar nada. Tras aplicar, verás los registros reflejados al instante en el panel de Cloudflare, ya gestionados por completo desde tu código.


Automatizar reglas y seguridad con Terraform Cloudflare

Terraform Cloudflare va mucho más allá del DNS. Puedes gestionar reglas de página, ajustes de zona y reglas de seguridad. Por ejemplo, forzar siempre HTTPS y activar el modo «Always Use HTTPS» se declara como un recurso más.

# settings.tf
resource "cloudflare_zone_settings_override" "main" {
  zone_id = data.cloudflare_zone.main.id
  settings {
    always_use_https = "on"
    ssl              = "full"
    min_tls_version  = "1.2"
  }
}

Con este bloque, aseguras que toda tu configuración de seguridad de la zona quede documentada y sea reproducible. Si alguien la cambia a mano en el panel, el siguiente terraform plan detectará la desviación y te permitirá restaurar el estado deseado. Esa capacidad de detectar cambios fuera de control es una de las razones de más peso para adoptar Terraform Cloudflare en equipos.

Para integrar estos cambios en un flujo automatizado, puedes combinar este proyecto con un pipeline como el que describimos en Terraform Actions para operaciones Day 2, ejecutando el apply de forma controlada tras cada revisión.

Casos de uso reales de Terraform Cloudflare

Para ver el valor práctico de este enfoque, pensemos en situaciones cotidianas de un equipo que gestiona varios dominios y servicios. Estos son los escenarios donde Terraform Cloudflare marca una diferencia clara frente a la gestión manual:

  • Alta de un nuevo servicio: añadir el subdominio, el registro y la regla de seguridad en un solo commit revisado por el equipo.
  • Migración de proveedor: replicar decenas de registros en otro dominio cambiando una variable, sin copiar a mano.
  • Recuperación ante desastres: si alguien borra registros por error, un terraform apply los restaura desde el código.
  • Auditoría y cumplimiento: demostrar quién cambió qué y cuándo, con el historial completo en Git.

En organizaciones donde varias personas tocan el DNS, la gestión manual acaba generando registros huérfanos, ajustes inconsistentes y errores difíciles de rastrear. Centralizarlo todo en Terraform Cloudflare convierte el DNS en un activo documentado y gobernado, en lugar de un punto ciego lleno de cambios sin registrar. Ese control resulta especialmente valioso cuando un fallo de DNS puede dejar tu servicio inaccesible en cuestión de segundos.


Buenas prácticas con Terraform Cloudflare

  • Estado remoto: guarda el tfstate en un backend remoto con bloqueo, nunca en local, porque contiene datos sensibles.
  • Importa lo existente: usa terraform import para llevar tus registros actuales al código sin recrearlos.
  • Módulos: encapsula el patrón DNS en un módulo reutilizable para gestionar varios dominios igual.
  • Mínimo privilegio: crea tokens específicos por proyecto y limita sus permisos a las zonas necesarias.
  • Revisión obligatoria: exige aprobación en los pull requests que toquen DNS de producción.

Un error común es olvidar importar los registros existentes: si aplicas sin importar, Terraform intentará crear duplicados o entrará en conflicto. Para más contenido de infraestructura como código, visita nuestra categoría de tutoriales de Terraform.

Solución de problemas frecuentes

  • Error 403 o de autenticación: el token no tiene permisos sobre la zona; revísalos en el panel de Cloudflare.
  • Registro duplicado: ya existía en Cloudflare; impórtalo con terraform import en lugar de crearlo.
  • El proxy no funciona: comprueba que proxied es true y que el tipo de registro admite proxy.
  • Cambios inesperados en cada plan: suele ser un ajuste modificado a mano; decide si lo gestionas por código o lo excluyes.

Si un plan muestra cambios que no esperabas, ejecútalo con terraform plan y revisa la diferencia con calma antes de aplicar. La transparencia del plan es tu mejor red de seguridad al trabajar con Terraform Cloudflare sobre un dominio en producción.

Integrar Terraform Cloudflare con tu infraestructura

El verdadero potencial de Terraform Cloudflare aparece cuando lo combinas con el resto de tu infraestructura como código. Imagina que despliegas una nueva aplicación en contenedores: en el mismo flujo puedes crear el servicio, obtener su dirección pública y publicar automáticamente el registro DNS que lo apunta, todo en una sola aplicación de Terraform.

Por ejemplo, si despliegas cargas con Terraform AWS ECS y Fargate, puedes encadenar la salida del balanceador con un recurso cloudflare_record que cree el subdominio correspondiente. De este modo, la infraestructura y su punto de entrada nacen y mueren juntos, sin pasos manuales que se olviden por el camino.

Esta orquestación extremo a extremo es lo que distingue a los equipos que dominan la infraestructura como código. En lugar de gestionar el cómputo en un sitio y el DNS en otro, unificas todo en un mismo repositorio, con una única fuente de verdad. Terraform Cloudflare se convierte así en una pieza más de un sistema coherente, donde cada cambio se propaga de forma controlada y trazable. A medida que tu plataforma crece, esta coherencia evita el caos de configuraciones dispersas y reduce drásticamente los errores humanos, que son la causa más común de las caídas relacionadas con el DNS.

Conclusión

Con Terraform Cloudflare has llevado tu DNS y tu seguridad perimetral al terreno de la infraestructura como código: versionada, revisable y reproducible. Hemos configurado el proveedor con un token seguro, gestionado zonas y registros, y automatizado ajustes de seguridad de la zona. A partir de aquí, importa tus dominios existentes, encapsula el patrón en módulos e intégralo en tu pipeline para no volver a tocar el panel a mano.

Preguntas frecuentes sobre Terraform Cloudflare

¿Puedo gestionar registros existentes sin recrearlos?

Sí. Usa terraform import para incorporar registros ya creados en Cloudflare a tu estado de Terraform. A partir de ahí los gestionas desde el código sin borrarlos ni duplicarlos.

¿Qué permisos necesita el token de API?

Para lo básico, permisos de edición de DNS y lectura de zona. Si gestionas reglas o ajustes, añade los permisos correspondientes, siempre siguiendo el principio de mínimo privilegio.

¿Funciona con OpenTofu?

Sí. El proveedor de Cloudflare es compatible con OpenTofu, el fork open source de Terraform. El código HCL es idéntico; solo cambia el binario que ejecutas.

¿Es peligroso gestionar el DNS de producción así?

Es más seguro que hacerlo a mano, siempre que revises el plan y uses control de versiones. El terraform plan te muestra cada cambio antes de aplicarlo, reduciendo el riesgo de errores.

Recursos y documentación oficial

Avatar

Por Mid

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x