Files

DNS-зоны и записи (зоны — карта)

Управление доменными зонами и их записями через Terraform вместо личного кабинета. Зоны и записи задаются одной картой zones.

Что получится после apply

По умолчанию — 2 зоны, по 3 записи в каждой:

Зона Записи
tfzone-a.test www → A 10.0.0.77, 203.0.113.14 · api → A · cdn → CNAME www.tfzone-a.test.
tfzone-b.test www → A · api → A · cdn → CNAME

Ресурсы

Ресурс Что делает
nubes_zones_v2 DNS-зона
nubes_zones_v2_record запись внутри зоны (A, CNAME, TXT, …)

Запись — отдельный ресурс, поэтому одну запись можно изменить или удалить, не трогая зону целиком.

Быстрый старт

cd dns_zones
cp terraform.tfvars.example terraform.tfvars

# 1. Создайте secrets.auto.tfvars (токен — СЕКРЕТ, НЕ в terraform.tfvars):
#    api_token = "<JWT>"
#    JWT берётся в ЛК: Профиль → Токены.

terraform init
terraform plan
terraform apply

Как изменить зоны и записи

Всё лежит в переменной zones (variables.tf — дефолт, или переопределите в terraform.tfvars):

zones = {
  a = {
    zone_name = "tfzone-a.test"
    records = {
      www = { type = "A",     values = ["10.0.0.77", "203.0.113.14"] } # одно имя → несколько адресов
      cdn = { type = "CNAME", values = ["www.tfzone-a.test."] }        # CNAME — с точкой на конце
    }
  }
}

Правила, которые сэкономят время:

  • Ключ карты (a, b, www…) — это адрес объекта в state. Смена ключа = «удалить + создать заново», а не «переименовать». Значение (zone_name, values) меняйте свободно.
  • Несколько адресов у одной записи — это один ресурс, а не несколько.
  • CNAME пишется с точкой на конце (www.example.com.), иначе платформа припишет домен зоны.

Допустимые типы записей

A, AAAA, CNAME, MX, SRV, TXT, LUA, NS, SSHFP.

Важно

  • Токен — только в secrets.auto.tfvars (файл в .gitignore). Никогда не коммитить.
  • Чтобы зона работала в интернете, у регистратора делегируйте домен на NS ns3.ngcloud.ru / ns4.ngcloud.ru.
  • Проверка: после apply повторный terraform plan должен дать No changes.

См. также

../dns_zones_generated/ — тот же сценарий, но зоны генерируются циклом из одного числа zone_count (удобно для многих однотипных зон).