До основного вмісту

Керування 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, не застосовувати зміни наосліп
← Назад до бази знань Поставити питання підтримці