Использование Terraform с CloudFlare — пошаговое руководство
Это практическое руководство показывает, как установить Terraform, подключить провайдер CloudFlare, безопасно передать токен API и создать/внести изменения в DNS-записи через Terraform. Включены примеры файлов, команды init/plan/apply, шаблоны для безопасного хранения секретов, чеклисты и план отката.
Быстрые ссылки
Установка Terraform
Настройка Terraform для CloudFlare
Определение конфигурации Terraform для CloudFlare
Планирование изменений Terraform
Применение изменений Terraform
Откат и runbook при инцидентах
Заключение

Введение
Terraform — распространённый инструмент «инфраструктура как код», а в связке с CloudFlare он упрощает управление DNS, правилами безопасности и другими edge-конфигурациями. Terraform использует язык HCL для описания желаемого состояния инфраструктуры; провайдер CloudFlare применяет эти конфигурации к учётной записи CloudFlare.
Важно: в примерах мы не храним секреты в репозитории. Вместо этого используем локальные переменные, .auto.tfvars файлы и best practice по ограничению прав токенов.
Установка Terraform
Terraform доступен для Windows и Linux как единый исполняемый файл. Достаточно загрузить соответствующий архив/исполняемый файл и поместить его в PATH.
Установка на Windows
Скачайте исполняемый файл Terraform для Windows и положите его в директорию, которая находится в PATH. Если вы хотите, чтобы исполняемый файл был доступен всегда, можно добавить папку в PATH через PowerShell:
[System.Environment]::SetEnvironmentVariable("PATH",(($Env:PATH, "C:\Tools") -Join ";"),"User")
При желании измените “User” на “Machine” для изменения системной переменной PATH — для этого потребуются права администратора.
Установка на Linux
Скачайте архив релиза и распакуйте его. Замените {release} на нужную версию, например 0.13.0.
wget
unzip terraform_{release}_linux_amd64.zip
mv terraform /usr/bin/
Совет: проверяйте подпись или SHA256 релиза на официальном сайте перед установкой в production.
Настройка Terraform для CloudFlare
Создайте директорию для конфигурации Terraform (файлы с расширением .tf).
PowerShell 7 на Windows:
New-Item -Name 'CF_Terraform' -Type 'Directory'
Set-Location -Path 'CF_Terraform'
Bash на Linux:
mkdir cf_terraform
cd cf_terraform
Мы не храним токены в конфигурации. Вместо этого создаём переменные и внешний файл с секретами, который исключён из контроля версий (.gitignore).
Пример провайдера: cloudflare.tf
variable "api_token" {}
provider "cloudflare" {
version = "~> 2.9"
api_token = var.api_token
}
Пример файла с локальными секретами: cloudflare.auto.tfvars
# Zone.DNS Permissions
# Пример токена для иллюстрации
api_token = "as3uo7WkxL6asdfasdfaME7IdLofKBG9C_Zi-gf"
Пояснение: суффикс .auto.tfvars заставляет Terraform автоматически подхватывать этот файл без явного указания -var-file.
После создания файлов выполните:
terraform init
Определение конфигурации CloudFlare в Terraform
Добавьте в cloudflare.auto.tfvars идентификатор зоны (zone_id) для целевого домена:
# Zone.DNS Permissions
api_token = "as3uo7WkxL6asdfasdfaME7IdLofKBG9C_Zi-gf"
# ID зоны конкретного домена
zone_id = "fddd89b6e1d52ebdfdasdc8bc02186333"
Теперь определим DNS-записи с помощью ресурса cloudflare_record.
resource "cloudflare_record" "a_mydomain_com" {
zone_id = var.zone_id
name = "mydomain.com"
value = "133.145.220.110"
type = "A"
ttl = 1
proxied = true
}
resource "cloudflare_record" "cname_www" {
zone_id = var.zone_id
name = "www"
value = "mydomain.com"
type = "CNAME"
ttl = 1
proxied = true
}
Совет: имена ресурсов (например, a_mydomain_com) произвольны, но при импорте состояния нужно совпадение с именем ресурса в конфигурации.
Чтобы импортировать существующую запись в state:
terraform import cloudflare_record.a_mydomain_com {zone_id}/{record_id}Планирование изменений
Запустите terraform plan, чтобы увидеть отличия между текущим состоянием (tfstate) и желаемой конфигурацией. Если ресурсов ещё нет в state, Terraform покажет, что будет создано.
terraform plan
Проверяйте plan перед применением: он служит предкоммитным обзором конфигурации.
Применение изменений
Когда уверены в плане, применяйте изменения:
terraform applyКоманда запросит подтверждение (yes) и применит изменения к CloudFlare.

Совет: в CI/CD применяйте terraform apply -auto-approve только при наличии подходящих проверок и ограниченных прав у токена.
Безопасность и управление доступом
- Используйте токены API с минимальными правами (principle of least privilege). Для управления DNS создайте токен только с правами Zone.Zone и Zone.DNS для конкретной зоны.
- Никогда не храните токены в публичных репозиториях. Добавьте
cloudflare.auto.tfvarsв.gitignore. - Логи CI не должны выводить значения переменных. В CI рекомендуется передавать секреты через защищённые переменные окружения.
Откат и runbook при ошибках
Если apply привёл к нежелательным изменениям, возможные сценарии отката:
- Быстрый откат через VCS: верните конфигурацию в предыдущую версию и
terraform apply— изменения приведут инфраструктуру в соответствие с новой (старой) конфигурацией. - Ручной откат в CloudFlare через веб-интерфейс — применяйте как крайний вариант, если Terraform не может корректно восстановить ресурсы.
- Восстановление из бэкапа
tfstate: если используется remote state с версионированием (S3/Backends), восстановите предыдущую версию state и выполнитеterraform apply.
Пример runbook (кратко):
- Шаг 1: Остановите CI-пайплайн, который может влиять на CloudFlare.
- Шаг 2: Сохраните текущий state и экспортируйте его в безопасное место.
- Шаг 3: Откатите конфигурацию в VCS на рабочую ревизию.
- Шаг 4: Выполните
terraform planиterraform applyс проверкой. - Шаг 5: Проверка DNS и сервисов, уведомление заинтересованных лиц.
Критерии приёмки
- Terraform plan не показывает удаления критичных записей без явного разрешения.
- Записи DNS служат ожидаемым TTL и корректно резолвятся для 90% тестовых клиентов в контрольной сети.
- Не обнаружено утечек токенов в логах/CI.
Чеклисты по ролям
DevOps
- Настроить remote state и резервные копии.
- Ограничить права токена API.
- Автоматизировать план в CI и требовать ручного approve для apply.
SRE
- Добавить тесты резолвинга DNS после apply.
- Наблюдение и оповещения на изменение доступности сервисов.
- Подготовить runbook на случай регресса.
Разработчик
- Не хранить секреты в коде.
- Проверять plan локально перед созданием PR.
Security
- Проверить scope токена и политику доступа.
- Проанализировать возможные векторы утечки через CI.
Тесты и критерии приёмки
Минимальный набор тестов после apply:
- Синтаксическая проверка конфигурации:
terraform validate. - Функциональная проверка:
dig @1.1.1.1 mydomain.com Aиdig @1.1.1.1 www.mydomain.com CNAME. - Smoke-тесты сервисов, зависящих от DNS.
Критерии приёмки (повтор):
- Все новые ресурсы созданы согласно plan.
- Никакие критические записи не удалены.
- DNS-пропагация подтверждена в избранных регионах.
Когда подход с Terraform + CloudFlare может не подойти
- Когда нужно сделать исключительные одноразовые изменения — ручной интерфейс быстрее.
- Если у вас очень небольшая инфраструктура и вы не готовы поддерживать Terraform state.
- При необходимости сложной логики на уровне UI CloudFlare, не поддерживаемой провайдером Terraform.
Альтернативные подходы
- Использовать API CloudFlare напрямую через скрипты (curl/SDK) для простых массовых правок.
- Использовать другие IaC-инструменты (Ansible с cloudflare модулем) если у вас уже есть инфраструктура на Ansible.
Методология внедрения (мини-метод)
- Разработайте конфигурацию локально и проверьте
terraform validate. - Запустите
terraform planи создайте Pull Request с планом. - Проведите ревью конфигурации и ограничьте scope токенов.
- Примените изменения в тестовой зоне/стейдж среде.
- После проверки примените в продакшн через контролируемый pipeline.
Быстрый чек-лист для PR
- Файл с секретами добавлен в .gitignore
- План изменений прикреплён к PR
- Токен имеет минимальные права
- Тесты резолвинга проходят
Полезные команды-штампы
- Инициализация:
terraform init - Проверка собираемости:
terraform validate - План:
terraform plan - Применение:
terraform apply - Импорт:
terraform import
Примеры конфигураций
cloudflare.tf
variable "api_token" {}
provider "cloudflare" {
version = "~> 2.9"
api_token = var.api_token
}
cloudflare.auto.tfvars
# Zone.DNS Permissions
api_token = "as3uo7WkxL6asdfasdfaME7IdLofKBG9C_Zi-gf"
# Specific Domain Zone ID
zone_id = "fddd89b6e1d52ebdfdasdc8bc02186333"
Пример ресурсов DNS приведён выше.
Decision flow (принятие решения применить изменения)
flowchart TD
A[Изменения в конфигурации] --> B{Есть ли критичные удаления?}
B -- Да --> C[Остановить, уточнить изменения]
B -- Нет --> D{Прошел ли plan ревью?}
D -- Нет --> E[Создать PR и запросить ревью]
D -- Да --> F[Запустить apply в staging]
F --> G{Тесты пройдены?}
G -- Да --> H[Запустить apply в production]
G -- Нет --> CЗаключение
Комбинация Terraform и CloudFlare даёт мощный и предсказуемый способ управления DNS и edge-конфигурациями. Описанная методология и чеклисты помогут минимизировать риски: ограничивайте права токенов, проверяйте план и используйте CI-процессы для контроля изменений. При возникновении ошибок откат через VCS или восстановление state обычно решает проблему быстро.
Короткое резюме во избежание потери деталей:
- Не храните секреты в репозитории — используйте
.auto.tfvarsили переменные окружения. - Всегда запускайте
terraform planи ревью передterraform apply. - Настройте remote state и резервные копии.
- Подготовьте runbook на случай отката.
Важно: любые токены в примерах — демонстрационные; используйте реальные, минимально привилегированные токены.
Это практическое руководство показывает, как установить Terraform, подключить провайдер CloudFlare, безопасно передать токен API и создать/внести изменения в DNS-записи через Terraform. Включены примеры файлов, команды init/plan/apply, шаблоны для безопасного хранения секретов, чеклисты и план отката.
Ключевые выводы
- Версионируйте конфигурации и храните state в удалённом backend с версионированием.
- Применяйте принцип наименьших привилегий для API-токенов.
- Используйте план и ревью процессов перед применением изменений.
- Подготовьте runbook для быстрого отката.
Похожие материалы
Herodotus: механизм и защита Android‑трояна
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить