---
title: 'Создать приватную зону и ресурсные записи через Terraform'
sidebar_label: "Создать приватную зону и ресурсные записи"
description: "Как создать приватную сеть и подсеть, приватную DNS-зону и ресурсные записи для нее и подключить сеть к зоне"
sidebar_position: 1
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import ConfigureProviders from '@site/terraform/_partials/common/configure-providers.mdx'
import ConfigureProvidersConfig from '@site/terraform/_partials/common/configure-providers-config.mdx'
import CreateResourcesAlert from '@site/terraform/_partials/common/create-resources-alert.mdx'
import CreateNetworks from '@site/terraform/_partials/cloud-networks/create-networks.mdx'
import {TabItemLabel} from '@selectel/docux/components'

# Создать приватную зону и ресурсные записи через Terraform

<CreateResourcesAlert />

<br />

1. Опционально: [настройте провайдеры](#configure-providers).
2. [Создайте приватную сеть и подсеть](#create-networks).
3. [Создайте зону с записями](#create-zone-with-records).
4. Опционально: чтобы A- и AAAA-записи для портов в зоне создавались и обновлялись автоматически, [добавьте сеть в зону](#add-network-to-zone).
5. Опционально: если вы подключили сеть к зоне, [создайте порт с доменным именем](#specify-port-domain-name) — A-запись для IP-адреса порта создастся или обновится автоматически.

## Конфигурационные файлы \{#config}

<details>
  <summary>Пример файла для настройки провайдеров</summary>

  <ConfigureProvidersConfig />
</details>

<details>
  <summary>Пример файла для создания приватной зоны и записей с добавлением сети в зону</summary>

  ```hcl
  resource "openstack_networking_network_v2" "network_1" {
    name                  = "network"
    port_security_enabled = "true"
  }

  resource "openstack_networking_subnet_v2" "subnet_1" {
    name       = "subnet"
    network_id = openstack_networking_network_v2.network_1.id
    cidr       = "192.168.0.0/24"
  }

  resource "selectel_private_dns_zone_v1" "zone_1" {
    region     = openstack_networking_network_v2.network_1.region
    project_id = openstack_networking_network_v2.network_1.tenant_id
    domain     = "example.com."
    ttl        = 10

    records {
      domain = "database.example.com."
      type   = "A"
      ttl    = 10
      values = [
        "192.168.0.2",
      ]
    }

    records {
      domain = "mail.example.com."
      type   = "MX"
      ttl    = 10
      values = [
        "192.168.0.3",
      ]
    }
  }

  resource "openstack_networking_network_v2" "network_1" {
    dns_domain = "example.com."
  }

  resource "openstack_networking_port_v2" "port_1" {
    name       = "port"
    network_id = openstack_networking_network_v2.network_1.id
    dns_name   = "database.example.com."

    fixed_ip {
      subnet_id = openstack_networking_subnet_v2.subnet_1.id
    }
  }
  ```
</details>

<details>
  <summary>Пример файла для создания приватной зоны и записей без добавления сети в зону</summary>

  ```hcl
  resource "openstack_networking_network_v2" "network_1" {
    name = "network"
  }

  resource "openstack_networking_subnet_v2" "subnet_1" {
    name       = "subnet"
    network_id = openstack_networking_network_v2.network_1.id
    cidr       = "192.168.0.0/24"
  }

  resource "selectel_private_dns_zone_v1" "zone_1" {
    region     = openstack_networking_network_v2.network_1.region
    project_id = openstack_networking_network_v2.network_1.tenant_id
    domain     = "example.com."
    ttl        = 10

    records {
      domain = "database.example.com."
      type   = "A"
      ttl    = 10
      values = [
        "192.168.0.2",
      ]
    }

    records {
      domain = "mail.example.com."
      type   = "MX"
      ttl    = 10
      values = [
        "192.168.0.3",
      ]
    }
  }
  ```
</details>

## 1. Опционально: настроить провайдеры \{#configure-providers}

Если вы [настроили провайдеры](/terraform/configure-terraform-environment/#configure-providers) Selectel и OpenStack, пропустите этот шаг.

<ConfigureProviders />

## 2. Создать приватную сеть и подсеть \{#create-networks}

<CreateNetworks />

## 3. Создать зону с записями \{#create-zone-with-records}

```hcl
data "openstack_networking_network_v2" "network_1" {
  name = "tf_test_network"
}

resource "selectel_private_dns_zone_v1" "zone_1" {
  region     = openstack_networking_network_v2.network_1.region
  project_id = openstack_networking_network_v2.network_1.tenant_id
  domain     = "example.com."
  ttl        = 10

  records {
    domain = "database.example.com."
    type   = "A"
    ttl    = 10
    values = [
      "192.168.0.2",
    ]
  }

  records {
    domain = "mail.example.com."
    type   = "MX"
    ttl    = 10
    values = [
      "192.168.0.3",
    ]
  }
}
```

Здесь:

* `domain` — доменное имя зоны, например `example.com.`;
* `ttl` — время жизни записей в зоне (TTL) в секундах, например `10`;
* `records` — запись в зоне:
  * `domain` — полное доменное имя записи (FQDN), например `database.example.com.`;
  * `type` — тип записи, например `A`;
  * `ttl` — время жизни записи (TTL) в секундах, например `10`;
  * `values` — значение записи, например `192.168.0.2`.

Посмотрите подробное описание ресурса [selectel\_private\_dns\_zone\_v1](/terraform/selectel-provider-reference/resources/private_dns_zone_v1/).

## 4. Опционально: добавить сеть в зону \{#add-network-to-zone}

```hcl
resource "openstack_networking_network_v2" "network_1" {
  dns_domain = "example.com."
}
```

Здесь `dns_domain` — доменное имя зоны, которое вы указали при [создании зоны и записей](#create-zone-with-records), например `example.com`.

Посмотрите подробное описание ресурса [openstack\_networking\_network\_v2](/terraform/openstack-provider-reference/networking-neutron/resources/openstack_networking_network_v2/).

## 5. Опционально: указать доменное имя порта \{#specify-port-domain-name}

```hcl
  resource "openstack_networking_port_v2" "port_1" {
    name       = "port"
    network_id = openstack_networking_network_v2.network_1.id
    dns_name   = "database.example.com."

    fixed_ip {
      subnet_id = openstack_networking_subnet_v2.subnet_1.id
    }
  }
```

Здесь `dns_name` — частичное доменное имя порта (PQDN), например `database`.

Посмотрите подробное описание ресурса [openstack\_networking\_port\_v2](/terraform/openstack-provider-reference/networking-neutron/resources/openstack_networking_port_v2/).

<Formbricks />
