---
title: "Create a zone with resource records in DNS hosting (actual) via Terraform"
sidebar_label: "Create a zone with resource records"
description: "How to create a zone in DNS hosting (actual) with A, MX, and TXT resource records"
sidebar_position: 1
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import ConfigureProviders from '@site/i18n/en/docusaurus-plugin-content-docs-terraform/current/_partials/common/configure-providers.mdx'
import ConfigureProvidersConfig from '@site/i18n/en/docusaurus-plugin-content-docs-terraform/current/_partials/common/configure-providers-config.mdx'
import CreateResourcesAlert from '@site/i18n/en/docusaurus-plugin-content-docs-terraform/current/_partials/common/create-resources-alert.mdx'

# Create a zone with resource records in DNS hosting (actual) via Terraform

<CreateResourcesAlert />

<br />

1. Optional: [configure providers](#configure-providers).
2. [Create a zone](#create-zone).
3. [Create resource records](#create-records).
4. [Delegate domain management](#delegate-domain).

## Configuration files \{#config}

<details>
  <summary>Example file for configuring providers</summary>

  <ConfigureProvidersConfig />
</details>

<details>
  <summary>Example file for creating a zone with resource records in DNS hosting (actual)</summary>

  ```hcl
  resource "selectel_domains_zone_v2" "zone_1" {
    name       = "example.com."
    project_id = selectel_vpc_project_v2.project_1.id
  }

  resource "selectel_domains_rrset_v2" "a_rrset_1" {
    zone_id    = selectel_domains_zone_v2.zone_1.id
    name       = selectel_domains_zone_v2.zone_1.name
    type       = "A"
    ttl        = 60
    project_id = selectel_vpc_project_v2.project_1.id
    records {
      content = "203.0.113.5"
    }
    records {
      content = "203.0.113.6"
    }
  }

  resource "selectel_domains_rrset_v2" "mx_rrset_1" {
    zone_id    = selectel_domains_zone_v2.zone_1.id
    name       = selectel_domains_zone_v2.zone_1.name
    type       = "MX"
    ttl        = 60
    project_id = selectel_vpc_project_v2.project_1.id
    records {
      content = "10 mail.example.org."
    }
  }

  resource "selectel_domains_rrset_v2" "txt_rrset_1" {
    zone_id    = selectel_domains_zone_v2.zone_1.id
    name       = selectel_domains_zone_v2.zone_1.name
    type       = "TXT"
    ttl        = 60
    project_id = selectel_vpc_project_v2.project_1.id
    records {
      content = "\"v=spf1 include:spf.mail.selcloud.ru ?all\""
    }
  }
  ```
</details>

## 1. Optional: configure providers \{#configure-providers}

If you have [configured the Selectel and OpenStack providers](/terraform/configure-terraform-environment/#configure-providers), skip this step.

<ConfigureProviders />

## 2. Create a zone \{#create-zone}

```hcl
resource "selectel_domains_zone_v2" "zone_1" {
  name       = "example.com."
  project_id = selectel_vpc_project_v2.project_1.id
}
```

Here `name` is the zone name, for example `example.com`.

See the detailed resource description for [selectel\_domains\_zone\_v2](/terraform/selectel-provider-reference/resources/domains_zone_v2/).

## 3. Create resource records \{#create-records}

```hcl
resource "selectel_domains_rrset_v2" "a_rrset_1" {
  zone_id    = selectel_domains_zone_v2.zone_1.id
  name       = selectel_domains_zone_v2.zone_1.name
  type       = "A"
  ttl        = 60
  project_id = selectel_vpc_project_v2.project_1.id
  records {
    content = "203.0.113.5"
  }
  records {
    content = "203.0.113.6"
  }
}

resource "selectel_domains_rrset_v2" "mx_rrset_1" {
  zone_id    = selectel_domains_zone_v2.zone_1.id
  name       = selectel_domains_zone_v2.zone_1.name
  type       = "MX"
  ttl        = 60
  project_id = selectel_vpc_project_v2.project_1.id
  records {
    content = "10 mail.example.org."
  }
}

resource "selectel_domains_rrset_v2" "txt_rrset_1" {
  zone_id    = selectel_domains_zone_v2.zone_1.id
  name       = selectel_domains_zone_v2.zone_1.name
  type       = "TXT"
  ttl        = 60
  project_id = selectel_vpc_project_v2.project_1.id
  records {
    content = "\"v=spf1 include:spf.mail.selcloud.ru ?all\""
  }
}
```

Where:

* `type` — record type;
* `ttl` — record time to live in seconds, from 60 to 604 800;
* `content` — record value.

See the detailed resource description for [selectel\_domains\_rrset\_v2](/terraform/selectel-provider-reference/resources/domains_rrset_v2/).

## 4. Delegate domain management \{#delegate-domain}

To transfer management of domain resource records to Selectel servers, you must delegate the domain — specify these servers in the domain's NS records.

1. Go to the control panel of the domain registrar where your domain is registered.
2. In the NS records, replace the values with Selectel's NS servers: `a.ns.selectel.ru`, `b.ns.selectel.ru`, `c.ns.selectel.ru`, `d.ns.selectel.ru`. Each server must be specified in a separate record.

<Formbricks />
