Поиск по сайту:

Как использовать Terraform с CloudFlare


Terraform — популярная инфраструктура в качестве инструмента кода, и в сочетании с CloudFlare значительно упрощает управление сложными конфигурациями в CloudFlare. Для тех, кто не знаком, Terraform использует язык конфигурации HCL для определения конфигурации инфраструктуры, которую затем можно использовать для применения запрошенных параметров к провайдеру. CloudFlare предлагает услуги DNS, безопасность и услуги граничных вычислений, которые идеально сочетаются с инструментом Terraform.

Установка Терраформ

Terraform можно использовать как в Windows, так и в Linux. Сам двоичный файл Terraform представляет собой один исполняемый файл, и его нужно просто загрузить и поместить в системный путь.

Установка Windows

Во-первых, вам нужно скачать исполняемый файл Terraform для Windows. После загрузки поместите исполняемый файл в путь Windows. Если вам нужно поместить исполняемый файл в другое место, но вы хотите, чтобы он был доступен в любое время, вы можете использовать следующий код PowerShell для изменения пользовательской переменной окружения PATH.

[System.Environment]::SetEnvironmentVariable("PATH",(($Env:PATH, "C:\Tools") -Join ";"),"User")

Это можно использовать для изменения системного PATH, изменив User на Machine. Для этого вам потребуются права администратора.

Установка Linux

Как и в Windows, вы загрузите последнюю версию Terraform. Поскольку вы не всегда можете использовать графический интерфейс, вы можете сделать это с помощью следующего кода оболочки. Замените {release} версией кода, например 0.13.0.

wget <https://releases.hashicorp.com/terraform/{release}/terraform_{release}_linux_amd64.zip>
unzip terraform_{release}_linux_amd64.zip
mv terraform /usr/bin/

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

Чтобы содержать нашу конфигурацию Terraform, мы собираемся создать каталог для хранения файлов .tf, которые являются расширением файлов конфигурации Terraform. Создайте новый каталог для хранения конфигурации.

PowerShell 7 в Windows

New-Item -Name 'CF_Terraform' -Type 'Directory'
Set-Location -Path 'CF_Terraform'

Оболочка Bash в Linux

mkdir cf_terraform
cd cf_terraform

После того, как вы создали каталог и перешли к нему, нам нужно будет инициализировать конфигурацию Terraform. Сначала нам нужно создать наш файл конфигурации. Мы решили не жестко кодировать наши учетные данные в файле конфигурации. Вместо этого файл будет передавать те учетные данные, которые исключены из системы контроля версий. Говоря об этом, Git настоятельно рекомендуется отслеживать изменения.

cloudflare.tf

variable "api_token" {}

provider "cloudflare" {
  version   = "~> 2.9"
  api_token = var.api_token
}

Следующий файл .auto.tfvars будет содержать секреты, которые мы передаем в Terraform, но не хотим фиксировать в истории контроля версий.

cloudflare.auto.tfvars

# Zone.DNS Permissions
# Example token below
api_token = "as3uo7WkxL6asdfasdfaME7IdLofKBG9C_Zi-gf"

Причина использования раздела .auto в имени файла .tfvars заключается в том, что эта переменная папка будет автоматически считываться Terraform при выполнении операций вместо того, чтобы явно передавать ее через - var-file=\cloudflare.tfvars\.

Теперь, когда у нас настроены оба файла, пришло время инициализировать нашу конфигурацию. Это установит всех провайдеров, которые были указаны в разделе provider нашего файла конфигурации Terraform.

terraform init

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

Теперь, когда мы успешно подключились к нашему домену, нам нужно создать нашу конфигурацию. Первое, что нам нужно сделать, это изменить наш файл cloudflare.auto.tfvars, включив в него zone_id, на который мы собираемся ориентироваться при изменении записей DNS. Добавьте следующую строку в файл cloudflare.auto.tfvars.

# Zone.DNS Permissions
api_token = "as3uo7WkxL6asdfasdfaME7IdLofKBG9C_Zi-gf"
# Specific Domain Zone ID
zone_id   = "fddd89b6e1d52ebdfdasdc8bc02186333"

Далее нам нужно определить записи, которые мы собираемся добавить в CloudFlare. Для этого мы будем использовать ресурс cloudflare_record для создания записей. Формат следующий: resource {type} {name}. Тип будет cloudflare_record, а для имени мы будем использовать a_mydomain_com и cname_www. Эти имена произвольны, и они могут быть какими угодно.

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
}

Одно предостережение по поводу имен. Если вы хотите использовать terraform import для импорта состояния данной записи, вам нужно будет сопоставить имя с записью импорта следующим образом:

terraform import cloudflare_record.a_mydomain_com {zone_id}/{record_id}

Планирование изменений терраформы

Теперь, когда мы определили нашу конфигурацию, мы можем запустить команду terraform plan, которая создаст изменения между тем, что известно Terraform через файл .tfstate, и средой CloudFlare. . Если ресурсы не были импортированы или команда запущена впервые, то Terraform не будет знать об окружении и все изменения будут новыми.

terraform plan

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

Если вы уверены в своей конфигурации, просто используйте команду apply. Это запросит подтверждение, где вам нужно ввести yes. В выходных данных будет показана применяемая конфигурация и состояние.

terraform apply

Заключение

Сочетание CloudFlare и Terraform — мощная комбинация. Когда вы сможете спроектировать свою среду в коде и отслеживать изменения с течением времени (используя контроль версий), вы откроете новые возможности для повышения эффективности и контроля. В случае неправильной конфигурации можно легко вернуться к предыдущей конфигурации, что делает восстановление после ошибок очень быстрым и безболезненным.