К основному содержимому

Управление Cloudflare через API и Terraform без кликов

Cloudflare · 29.09.2026

Зачем управлять Cloudflare через API и Terraform

Пока в аккаунте один сайт, настройки Cloudflare удобно менять руками в Dashboard. Как только доменов становится десять и больше, а правила кэша и firewall нужно повторить на каждом, ручные клики превращаются в источник расхождений между зонами.

API и Terraform решают это через код: одна и та же DNS-запись или правило описываются один раз и применяются к нужным зонам командой, а не серией кликов по вкладкам. Изменения видны в git-истории, а не только в логе аудита Cloudflare.

Когда хватит обычного API, а когда нужен Terraform

Выбор зависит от того, разовая это задача или повторяемая конфигурация, которую нужно держать в актуальном состоянии.

ЗадачаREST APITerraform
Разовое изменение записиОдин запрос curl, проще всегоИзбыточно для одной правки
Одинаковая настройка на 20 зонахНужен свой скрипт с цикломОдин модуль на все зоны
Отслеживание измененийТолько через Audit Log в DashboardDiff в git перед каждым apply

Первый запрос к API: токен и проверка

Токен создаётся в Dashboard в разделе My Profile → API Tokens с правами Zone:Edit на конкретную зону, а не глобальный Account API Key. Проверить токен можно одним запросом:

curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
  -H "Authorization: Bearer $CF_API_TOKEN"

Ответ со статусом active подтверждает, что токен рабочий и можно переходить к изменению записей DNS или правил кэша, описанных в статье про DNS-записи и режим Proxy.

Provider Terraform для Cloudflare: базовая настройка

Официальный provider подключается тремя строками в конфигурации, после чего Terraform умеет создавать и обновлять ресурсы Cloudflare тем же способом, что и ресурсы облачного провайдера.

terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.0"
    }
  }
}

provider "cloudflare" {
  api_token = var.cf_api_token
}

Пример: DNS-запись и правило кэша в виде кода

Ресурс cloudflare_record описывает DNS-запись, а cloudflare_ruleset — правило кэша или firewall тем же синтаксисом, что и остальную инфраструктуру:

resource "cloudflare_record" "app" {
  zone_id = var.zone_id
  name    = "app"
  type    = "A"
  content = "203.0.113.10"
  proxied = true
}

После правки файла достаточно команды terraform plan, чтобы увидеть, какие записи изменятся, и terraform apply — чтобы применить их сразу на всех перечисленных зонах.

State-файл и типичные ошибки

Главный источник проблем — не сам provider, а обращение с файлом состояния и правами токена:

  • state-файл хранит значения ресурсов в открытом виде — его нельзя коммитить в публичный репозиторий
  • для команды state лучше держать в удалённом backend, а не на одном ноутбуке
  • токен с правом Zone:Edit на все зоны аккаунта опаснее токена на одну зону
  • ручная правка в Dashboard после apply создаёт расхождение — Terraform откатит её при следующем apply

Итог: с чего начать автоматизацию

API подходит для разовых скриптов и интеграций, Terraform — для конфигурации, которую нужно повторять на многих зонах и держать под контролем версий.

  1. создать API-токен с правами только на нужные зоны, не Account API Key
  2. подключить provider cloudflare/cloudflare нужной версии
  3. перенести в код записи DNS и правила из Cache Rules и WAF Custom Rules
  4. настроить удалённый backend для state-файла
  5. проверять plan перед каждым apply, не применять изменения вслепую
← Назад в базу знаний Задать вопрос поддержке