---
title: "Создать несколько одинаковых облачных серверов в одной приватной сети через Terraform"
sidebar_label: "Создать несколько одинаковых серверов в одной приватной сети"
sidebar_position: 7
description: "Как создать несколько одинаковых облачных серверов в одной приватной сети"
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import ConfigureProviders from '@site/terraform/_partials/common/configure-providers.mdx'
import ConfigureProvidersConfig from '@site/terraform/_partials/common/configure-providers-config.mdx'
import CreateRouter from '@site/terraform/_partials/cloud-networks/create-router.mdx'
import CreateNetworks from '@site/terraform/_partials/cloud-networks/create-networks.mdx'
import AddPublicSsh from '@site/terraform/_partials/cloud-servers/add-public-ssh-key.mdx'
import CreatePort from '@site/terraform/_partials/cloud-servers/create-port.mdx'
import GetImage from '@site/terraform/_partials/cloud-servers/get-image.mdx'
import CreateResourcesAlert from '@site/terraform/_partials/common/create-resources-alert.mdx'
import CreatePublicIp from '@site/terraform/_partials/cloud-networks/create-public-ip.mdx'
import AssociateIp from '@site/terraform/_partials/cloud-networks/associate-ip.mdx'
import GetIp from '@site/terraform/_partials/cloud-networks/get-ip.mdx'

# Создать несколько одинаковых облачных серверов в одной приватной сети через Terraform

<CreateResourcesAlert />

<br />

1. Опционально: [настройте провайдеры](#configure-providers).

2. [Добавьте публичный SSH-ключ](#add-public-ssh-key).

3. [Создайте приватную сеть и подсеть](#create-networks).

4. [Создайте облачный роутер, подключенный к интернету](#create-router).

5. [Создайте порты для облачных серверов](#create-ports).

6. [Получите образ](#get-image).

7. [Создайте облачные серверы](#create-servers).

8. [Создайте публичные IP-адреса](#create-public-ips).

9. [Ассоциировать публичные и приватные IP-адреса облачных серверов](#associate-ips).

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

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

  <ConfigureProvidersConfig />
</details>

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

  ```hcl
      resource "selectel_vpc_keypair_v2" "keypair_1" {
          name       = "keypair"
          public_key = file("~/.ssh/id_rsa.pub")
          user_id    = selectel_iam_serviceuser_v1.serviceuser_1.id
      }

      resource "openstack_networking_network_v2" "network_1" {
          name           = "private-network"
          admin_state_up = "true"
      }

      resource "openstack_networking_subnet_v2" "subnet_1" {
          network_id = openstack_networking_network_v2.network_1.id
          cidr       = "192.168.199.0/24"
      }

      data "openstack_networking_network_v2" "external_network_1" {
          external = true
      }

      resource "openstack_networking_router_v2" "router_1" {
          name                = "router"
          external_network_id = data.openstack_networking_network_v2.external_network_1.id
      }

      resource "openstack_networking_router_interface_v2" "router_interface_1" {
          router_id = openstack_networking_router_v2.router_1.id
          subnet_id = openstack_networking_subnet_v2.subnet_1.id
      }

      resource "openstack_networking_port_v2" "port" {
          name       = "port"
          count      = 3
          network_id = openstack_networking_network_v2.network2.id

          fixed_ip {
              subnet_id = openstack_networking_subnet_v2.subnet_2.id
          }

      }

      data "openstack_images_image_v2" "image_1" {
          name        = "Ubuntu 20.04 LTS 64-bit"
          most_recent = true
          visibility  = "public"
      }

      resource "openstack_compute_instance_v2" "server" {
          name              = "server"
          count             = 3
          image_id          = data.openstack_images_image_v2.ubuntu.id
          flavor_id         = "1312"
          key_pair          = selectel_vpc_keypair_v2.keypair_1.name
          availability_zone = "ru-9a"

          network {
              port = openstack_networking_port_v2.port[count.index].id
          }

          lifecycle {
              ignore_changes = [image_id]
          }

          vendor_options {
              ignore_resize_confirmation = true
          }

      }

      resource "openstack_networking_floatingip_v2" "floatingip" {
          pool  = "external-network"
          count = 3
      }

      resource "openstack_networking_floatingip_associate_v2" "association" {
          count       = 3
          port_id     = openstack_networking_port_v2.port[count.index].id
          floating_ip = openstack_networking_floatingip_v2.floatingip[count.index].address
      }
  ```
</details>

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

Если вы настроили провайдеры Selectel и OpenStack, пропустите этот шаг.

<ConfigureProviders />

## 2. Добавить публичный SSH-ключ \{#add-public-ssh-key}

<AddPublicSsh />

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

<CreateNetworks />

## 4. Создать облачный роутер, подключенный к интернету \{#create-router}

<CreateRouter />

## 5. Создать порты для облачных серверов \{#create-ports}

```hcl
resource "openstack_networking_port_v2" "port" {
  name       = "port"
  count      = 3
  network_id = openstack_networking_network_v2.network2.id

  fixed_ip {
    subnet_id = openstack_networking_subnet_v2.subnet_2.id
  }
}

```

Здесь `count` — количество портов.

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

## 6. Получить образ \{#get-image}

<GetImage />

## 7. Создать облачные серверы \{#create-servers}

```hcl
resource "openstack_compute_instance_v2" "server" {
  name              = "server"
  count             = 3
  image_id          = data.openstack_images_image_v2.ubuntu.id
  flavor_id         = "1312"
  key_pair          = selectel_vpc_keypair_v2.keypair_1.name
  availability_zone = "ru-9a"

  network {
    port = openstack_networking_port_v2.port[count.index].id
  }

  lifecycle {
    ignore_changes = [image_id]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}
```

Здесь:

* `count` — количество серверов;
* `flavor_id` — ID флейвора. Например, `1312` — ID флейвора с фиксированной конфигурацией линейки Standard c 1 vCPU, 2048 ГБ RAM, 16 ГБ локального диска. Список флейворов можно посмотреть с помощью команды `openstack flavor list` или в таблице [Список флейворов фиксированной конфигурации во всех пулах](/cloud-servers/create/configurations/#server-flavors-full-list);
* `availability_zone` — [сегмент пула](/infrastructure/locations/#pool), в котором будут созданы облачные серверы, например `ru-9a`. Список доступных сегментов пула можно посмотреть в инструкции [Доступность продуктов в локациях](/infrastructure/product-availability-by-location/).

Посмотрите подробное описание ресурса [openstack\_compute\_instance\_v2](/terraform/openstack-provider-reference/compute-nova/resources/openstack_compute_instance_v2/).

## 8. Создать публичные IP-адреса \{#create-public-ips}

```hcl
resource "openstack_networking_floatingip_v2" "floatingip" {
  count = 3
  pool  = "external-network"
}
```

Здесь `count` — количество публичных IP-адресов.

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

## 9. Ассоциировать публичные и приватные IP-адреса облачных серверов \{#associate-ips}

Публичные IP-адреса будут подключены к портам облачных серверов и ассоциированы с приватными IP-адресами.

```hcl
resource "openstack_networking_floatingip_associate_v2" "association" {
  count       = 3
  port_id     = openstack_networking_port_v2.port[count.index].id
  floating_ip = openstack_networking_floatingip_v2.floatingip[count.index].address
}
```

Здесь `count` — количество ассоциаций публичных и приватных IP-адресов.

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

<Formbricks />
