docs: дружелюбные README для примеров DNS (для пользователя)

This commit is contained in:
Repinoid
2026-10-17 08:15:50 +03:00
parent f332833ee2
commit 9731ba672f
2 changed files with 109 additions and 54 deletions
+56 -24
View File
@@ -1,40 +1,72 @@
# DNS-зоны и записи через Terraform
# DNS-зоны и записи (зоны — карта)
Пример: доменные зоны компании и записи в них — целиком через Terraform.
Зоны задаются картой `var.zones` (`for_each`), записи — вложенным циклом
(`flatten` + `for_each`).
Управление доменными зонами и их записями через 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` | 109 | DNS-зона |
| `nubes_zones_v2_record` | подресурс зоны | Запись внутри зоны (A / CNAME / …) |
| Ресурс | Что делает |
|---|---|
| `nubes_zones_v2` | DNS-зона |
| `nubes_zones_v2_record` | запись внутри зоны (`A`, `CNAME`, `TXT`, …) |
## Что в конфиге
Запись — отдельный ресурс, поэтому одну запись можно изменить или удалить, не трогая зону целиком.
- N зон из `var.zones` (по умолчанию 2: `tfzone-a.test`, `tfzone-b.test`);
- по 3 записи в каждой зоне (`A`, `A`, `CNAME`).
Чтобы добавить/убрать зону или запись — правьте `var.zones`, затем `apply`.
## Как запустить
## Быстрый старт
```bash
cp terraform.tfvars.example terraform.tfvars # подставить api_endpoint (если нужно)
# api_token — в secrets.auto.tfvars (НЕ в terraform.tfvars!)
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 # запускает пользователь
terraform apply
```
## Проверки
## Как изменить зоны и записи
- После `apply` повторный `plan` должен давать `No changes`.
- Изменение значения записи → обычный `apply` (поле `record_input` модифицируемое).
- Чтобы зона работала в интернете, домен у регистратора надо делегировать на NS
`ns3.ngcloud.ru` / `ns4.ngcloud.ru`.
Всё лежит в переменной `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/` — тот же сценарий, но N зон генерируются программно.
`../dns_zones_generated/` — тот же сценарий, но зоны генерируются циклом из одного числа `zone_count` (удобно для многих однотипных зон).