# 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`, …) | Запись — отдельный ресурс, поэтому одну запись можно изменить или удалить, не трогая зону целиком. ## Быстрый старт ```bash cd dns_zones cp terraform.tfvars.example terraform.tfvars # 1. Создайте secrets.auto.tfvars (токен — СЕКРЕТ, НЕ в terraform.tfvars): # api_token = "" # JWT берётся в ЛК: Профиль → Токены. terraform init terraform plan terraform apply ``` ## Как изменить зоны и записи Всё лежит в переменной `zones` (`variables.tf` — дефолт, или переопределите в `terraform.tfvars`): ```hcl 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` (удобно для многих однотипных зон).