Как использовать 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 — мощная комбинация. Когда вы сможете спроектировать свою среду в коде и отслеживать изменения с течением времени (используя контроль версий), вы откроете новые возможности для повышения эффективности и контроля. В случае неправильной конфигурации можно легко вернуться к предыдущей конфигурации, что делает восстановление после ошибок очень быстрым и безболезненным.