Гид по технологиям

Использование Terraform с CloudFlare — пошаговое руководство

6 min read DevOps Обновлено 30 Oct 2025
Terraform + CloudFlare: настройка и применение
Terraform + CloudFlare: настройка и применение

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

Быстрые ссылки

  • Установка Terraform

  • Настройка Terraform для CloudFlare

  • Определение конфигурации Terraform для CloudFlare

  • Планирование изменений Terraform

  • Применение изменений Terraform

  • Откат и runbook при инцидентах

  • Заключение

Иллюстрация Terraform и CloudFlare

Введение

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

Инициализация конфигурации установит провайдеры, указанные в секции provider

Определение конфигурации 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

Запустите команду terraform plan

Проверяйте plan перед применением: он служит предкоммитным обзором конфигурации.

Применение изменений

Когда уверены в плане, применяйте изменения:

terraform apply

Команда запросит подтверждение (yes) и применит изменения к CloudFlare.

Команда apply запрашивает подтверждение; введите yes, чтобы применить конфигурацию и обновить состояние.

Совет: в CI/CD применяйте terraform apply -auto-approve только при наличии подходящих проверок и ограниченных прав у токена.

Безопасность и управление доступом

  • Используйте токены API с минимальными правами (principle of least privilege). Для управления DNS создайте токен только с правами Zone.Zone и Zone.DNS для конкретной зоны.
  • Никогда не храните токены в публичных репозиториях. Добавьте cloudflare.auto.tfvars в .gitignore.
  • Логи CI не должны выводить значения переменных. В CI рекомендуется передавать секреты через защищённые переменные окружения.

Откат и runbook при ошибках

Если apply привёл к нежелательным изменениям, возможные сценарии отката:

  1. Быстрый откат через VCS: верните конфигурацию в предыдущую версию и terraform apply — изменения приведут инфраструктуру в соответствие с новой (старой) конфигурацией.
  2. Ручной откат в CloudFlare через веб-интерфейс — применяйте как крайний вариант, если Terraform не может корректно восстановить ресурсы.
  3. Восстановление из бэкапа 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.

Методология внедрения (мини-метод)

  1. Разработайте конфигурацию локально и проверьте terraform validate.
  2. Запустите terraform plan и создайте Pull Request с планом.
  3. Проведите ревью конфигурации и ограничьте scope токенов.
  4. Примените изменения в тестовой зоне/стейдж среде.
  5. После проверки примените в продакшн через контролируемый 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 для быстрого отката.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Herodotus: механизм и защита Android‑трояна
Кибербезопасность

Herodotus: механизм и защита Android‑трояна

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти