Создать зону с ресурсными записями в DNS-хостинге
Мы рекомендуем создавать ресурсы по порядку. Если вы создаете все ресурсы единовременно, Terraform будет учитывать зависимости между ресурсами, которые вы указали в конфигурационном файле. Если зависимости не указаны, ресурсы будут создаваться параллельно, что может приводить к ошибкам. Например, ресурс, который требуется для создания другого ресурса, может быть еще не создан.
- Опционально: настройте провайдеры.
- Создайте зону.
- Создайте ресурсные записи.
- Делегируйте управление доменом.
Конфигурационные файлы
Пример файла для настройки провайдеров
terraform {
required_providers {
servercore = {
source = "terraform.servercore.com/servercore/servercore"
version = "~> 6.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}
provider "servercore" {
domain_name = "123456"
username = "user"
password = "password"
auth_region = "uz-1"
auth_url = "https://cloud.api.selcloud.ru/identity/v3/"
}
resource "servercore_project_v2" "project_1" {
name = "project"
}
resource "servercore_iam_serviceuser_v1" "serviceuser_1" {
name = "username"
password = "password"
role {
role_name = "member"
scope = "project"
project_id = servercore_project_v2.project_1.id
}
}
provider "openstack" {
auth_url = "https://cloud.api.selcloud.ru/identity/v3"
domain_name = "123456"
tenant_id = servercore_project_v2.project_1.id
user_name = servercore_iam_serviceuser_v1.serviceuser_1.name
password = servercore_iam_serviceuser_v1.serviceuser_1.password
region = "uz-1"
}
Пример файла для создания зоны с ресурсными записями в DNS-хостинге
resource "servercore_domains_zone_v2" "zone_1" {
name = "example.com."
project_id = servercore_project_v2.project_1.id
}
resource "servercore_domains_rrset_v2" "a_rrset_1" {
zone_id = servercore_domains_zone_v2.zone_1.id
name = servercore_domains_zone_v2.zone_1.name
type = "A"
ttl = 60
project_id = servercore_project_v2.project_1.id
records {
content = "203.0.113.5"
}
records {
content = "203.0.113.6"
}
}
resource "servercore_domains_rrset_v2" "mx_rrset_1" {
zone_id = servercore_domains_zone_v2.zone_1.id
name = servercore_domains_zone_v2.zone_1.name
type = "MX"
ttl = 60
project_id = servercore_project_v2.project_1.id
records {
content = "10 mail.example.org."
}
}
resource "servercore_domains_rrset_v2" "txt_rrset_1" {
zone_id = servercore_domains_zone_v2.zone_1.id
name = servercore_domains_zone_v2.zone_1.name
type = "TXT"
ttl = 60
project_id = servercore_project_v2.project_1.id
records {
content = "\"v=spf1 include:spf.servercore.mx ?all\""
}
}
1. Опционально: настроить провайдеры
Если вы настроили провайдеры Servercore и OpenStack, пропустите этот шаг.
-
Убедитесь, что в панели управления вы создали сервисного пользователя с ролями
memberв области доступа Аккаунт иiam_admin. -
Создайте директорию для хранения конфигурационных файлов и отдельный файл с расширением
.tfдля настройки провайдеров. -
В файл для настройки провайдеров добавьте провайдеры Servercore и OpenStack:
terraform {
required_providers {
servercore = {
source = "terraform.servercore.com/servercore/servercore"
version = "~> 6.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}Здесь
version— версии провайдеров. Актуальную версию провайдера OpenStack можно посмотреть в Terraform Registry и GitHub.Подробнее о продуктах, услугах и сервисах, которыми можно управлять с помощью провайдеров, в инструкции Провайдеры Servercore и OpenStack.
-
Инициализируйте провайдер Servercore:
provider "servercore" {
domain_name = "123456"
username = "user"
password = "password"
auth_region = "uz-1"
auth_url = "https://cloud.api.selcloud.ru/identity/v3/"
}Здесь:
domain_name— номер аккаунта Servercore. Можно посмотреть в панели управления в правом верхнем углу;username— имя сервисного пользователя с ролямиmemberв области доступа Аккаунт иiam_admin. Можно посмотреть в панели управления: в верхнем меню нажмите Аккаунт → раздел Сервисные пользователи (раздел доступен только Владельцу аккаунта и пользователю с рольюiam_admin);password— пароль сервисного пользователя. Можно посмотреть при создании пользователя или изменить на новый;auth_region— пул для авторизации, напримерuz-1. Создавать ресурсы можно в других пулах. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.
-
Создайте проект:
resource "servercore_project_v2" "project_1" {
name = "project"
}Посмотрите подробное описание ресурса servercore_vpc_project_v2.
-
Создайте сервисного пользователя для доступа к проекту и назначьте ему роль
memberв области доступа Проект:resource "servercore_iam_serviceuser_v1" "serviceuser_1" {
name = "username"
password = "password"
role {
role_name = "member"
scope = "project"
project_id = servercore_project_v2.project_1.id
}
}Здесь:
username— имя пользователя;password— пароль пользователя. Пароль должен быть не короче восьми символов и содержать латинские буквы разных регистров и цифры;project_id— ID проекта. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → откройте меню проектов → в строке нужного проекта нажмите .
Посмотрите подробное описание ресурса servercore_iam_serviceuser_v1.
-
Инициализируйте провайдер OpenStack:
provider "openstack" {
auth_url = "https://cloud.api.selcloud.ru/identity/v3"
domain_name = "123456"
tenant_id = servercore_project_v2.project_1.id
user_name = servercore_iam_serviceuser_v1.serviceuser_1.name
password = servercore_iam_serviceuser_v1.serviceuser_1.password
region = "uz-1"
}Здесь:
domain_name— номер аккаунта Servercore. Можно посмотреть в панели управления в правом верхнем углу;region— пул, напримерuz-1. Все ресурсы будут создаваться в этом пуле. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.
-
Если одновременно с настройкой провайдеров вы создаете ресурсы, то для ресурсов OpenStack добавьте аргумент
depends_on. Например, для ресурса openstack_networking_network_v2:resource "openstack_networking_network_v2" "network_1" {
name = "private-network"
admin_state_up = "true"
depends_on = [
servercore_project_v2.project_1,
servercore_iam_serviceuser_v1.serviceuser_1
]
} -
Откройте CLI.
-
Инициализируйте конфигурацию Terraform в директории:
terraform init -
Проверьте, что конфигурационные файлы составлены без ошибок:
terraform validate -
Отформатируйте конфигурационные файлы:
terraform fmt -
Проверьте, какие ресурсы будут созданы:
terraform plan -
Примените изменения и создайте ресурсы:
terraform apply -
Подтвердите создание — введите yes и нажмите Enter. Созданные ресурсы отобразятся в панели управления.
-
Если для создания ресурсов оказалось недостаточно квот, увеличьте квоты.
2. Создать зону
resource "servercore_domains_zone_v2" "zone_1" {
name = "example.com."
project_id = servercore_project_v2.project_1.id
}
Здесь name — имя зоны, например example.com..
Посмотрите подробное описание ресурса servercore_domains_zone_v2.
3. Создать ресурсные записи
resource "servercore_domains_rrset_v2" "a_rrset_1" {
zone_id = servercore_domains_zone_v2.zone_1.id
name = servercore_domains_zone_v2.zone_1.name
type = "A"
ttl = 60
project_id = servercore_project_v2.project_1.id
records {
content = "203.0.113.5"
}
records {
content = "203.0.113.6"
}
}
resource "servercore_domains_rrset_v2" "mx_rrset_1" {
zone_id = servercore_domains_zone_v2.zone_1.id
name = servercore_domains_zone_v2.zone_1.name
type = "MX"
ttl = 60
project_id = servercore_project_v2.project_1.id
records {
content = "10 mail.example.org."
}
}
resource "servercore_domains_rrset_v2" "txt_rrset_1" {
zone_id = servercore_domains_zone_v2.zone_1.id
name = servercore_domains_zone_v2.zone_1.name
type = "TXT"
ttl = 60
project_id = servercore_project_v2.project_1.id
records {
content = "\"v=spf1 include:spf.servercore.mx ?all\""
}
}