Перейти к основному содержимому

Создать выделенный сервер готовой конфигурации

Последнее изменение:

Мы рекомендуем создавать ресурсы по порядку. Если вы создаете все ресурсы единовременно, Terraform будет учитывать зависимости между ресурсами, которые вы указали в конфигурационном файле. Если зависимости не указаны, ресурсы будут создаваться параллельно, что может приводить к ошибкам. Например, ресурс, который требуется для создания другого ресурса, может быть еще не создан.

Чтобы назначить на сервер публичный выделенный IP-адрес, используйте инструкцию Создать выделенный сервер готовой конфигурации с публичным выделенным IP-адресом.


  1. Опционально: настройте провайдера.
  2. Получите ID готовой конфигурации.
  3. Получите ID локации.
  4. Получите образ ОС.
  5. Создайте выделенный сервер.

Конфигурационные файлы

Пример файла для настройки провайдеров
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "7.0.1-alpha"
}
}
}

provider "selectel" {
domain_name = "123456"
username = "user"
password = "password"
auth_region = "ru-1"
auth_url = "https://cloud.api.selcloud.ru/identity/v3/"
}
Пример файла для создания выделенного сервера готовой конфигурации
data "selectel_dedicated_configuration_v1" "server_config" {
project_id = selectel_vpc_project_v2.project_1.id
deep_filter = <<EOT
{
"name": "CL25-SSD"
}
EOT
}

data "selectel_dedicated_location_v1" "server_location" {
project_id = selectel_vpc_project_v2.project_1.id
filter {
name = "SPB-2"
}
}

data "selectel_dedicated_os_v1" "server_os" {
project_id = selectel_vpc_project_v2.project_1.id
filter {
name = "Ubuntu"
version = "2404"
configuration_id = data.selectel_dedicated_configuration_v1.server_config.configurations[0].id
location_id = data.selectel_dedicated_location_v1.server_location.locations[0].id
}
}

resource "selectel_dedicated_server_v1" "server_1" {
project_id = selectel_vpc_project_v2.project_1.id
configuration_id = data.selectel_dedicated_configuration_v1.server_config.configurations[0].id
location_id = data.selectel_dedicated_location_v1.server_location.locations[0].id
os_id = data.selectel_dedicated_os_v1.server_os.os[0].id
price_plan_name = "1 день"
}

1. Опционально: настроить провайдера

  1. Убедитесь, что в панели управления вы создали сервисного пользователя с ролями member в области доступа Аккаунт и iam_admin.

  2. Создайте директорию для хранения конфигурационных файлов и отдельный файл с расширением .tf для настройки провайдеров.

  3. В файл для настройки провайдеров добавьте провайдер Selectel:

    terraform {
    required_providers {
    selectel = {
    source = "selectel/selectel"
    version = "~> 7.0.0-preview"
    }
    }
    }

    Здесь version — версии провайдеров. Актуальную версию можно посмотреть в документации Selectel (в Terraform Registry и GitHub).

    Подробнее о продуктах, услугах и сервисах, которыми можно управлять с помощью провайдеров, в инструкции Провайдеры Selectel и OpenStack.

  4. Инициализируйте провайдер Selectel:

    provider "selectel" {
    domain_name = "123456"
    username = "user"
    password = "password"
    auth_region = "ru-9"
    auth_url = "https://cloud.api.selcloud.ru/identity/v3/"
    }

    Здесь:

    • domain_name — номер аккаунта Selectel. Можно посмотреть в панели управления в правом верхнем углу;
    • username — имя сервисного пользователя с ролями member в области доступа Аккаунт и iam_admin. Можно посмотреть в панели управления: в верхнем меню нажмите Аккаунт → раздел Сервисные пользователи (раздел доступен только Владельцу аккаунта и пользователю с ролью iam_admin);
    • password — пароль сервисного пользователя. Можно посмотреть при создании пользователя или изменить на новый;
    • auth_region — пул для авторизации, например ru-9. Создавать ресурсы можно в других пулах. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.
  5. Создайте проект:

    resource "selectel_vpc_project_v2" "project_1" {
    name = "project"
    }

    Посмотрите подробное описание ресурса selectel_vpc_project_v2.

  6. Создайте сервисного пользователя для доступа к проекту и назначьте ему роль member в области доступа Проект:

    resource "selectel_iam_serviceuser_v1" "serviceuser_1" {
    name = "username"
    password = "password"
    role {
    role_name = "member"
    scope = "project"
    project_id = selectel_vpc_project_v2.project_1.id
    }
    }

    Здесь:

    • username — имя пользователя;
    • password — пароль пользователя. Пароль должен быть не короче восьми символов и содержать латинские буквы разных регистров и цифры;
    • project_id — ID проекта. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → откройте меню проектов → в строке нужного проекта нажмите .

    Посмотрите подробное описание ресурса selectel_iam_serviceuser_v1.

  7. Опционально: если вы хотите использовать зеркало, создайте отдельный конфигурационный файл Terraform CLI и добавьте в него блок:

    provider_installation {
    network_mirror {
    url = "https://tf-proxy.selectel.ru/mirror/v1/"
    include = ["registry.terraform.io/*/*"]
    }
    direct {
    exclude = ["registry.terraform.io/*/*"]
    }
    }

    Подробнее о настройках зеркал в инструкции CLI Configuration File документации HashiCorp.

  8. Откройте CLI.

  9. Инициализируйте конфигурацию Terraform в директории:

    terraform init
  10. Проверьте, что конфигурационные файлы составлены без ошибок:

    terraform validate
  11. Отформатируйте конфигурационные файлы:

    terraform fmt
  12. Проверьте, какие ресурсы будут созданы:

    terraform plan
  13. Примените изменения и создайте ресурсы:

    terraform apply
  14. Подтвердите создание — введите yes и нажмите Enter. Созданные ресурсы отобразятся в панели управления.

  15. Если для создания ресурсов оказалось недостаточно квот, увеличьте квоты.

2. Получить ID готовой конфигурации

data "selectel_dedicated_configuration_v1" "server_config" {
project_id = selectel_vpc_project_v2.project_1.id
deep_filter = <<EOT
{
"name": "EL50-SSD"
}
EOT
}

Здесь deep_filter — фильтр списка готовых конфигураций:

  • name — название готовой конфигурации, например EL50-SSD. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Выделенные серверы. Если в проекте есть созданные серверы, в разделе Серверы нажмите Заказать сервер. Если в проекте нет серверов, страница заказа откроется автоматически.

Посмотрите подробное описание источника данных selectel_dedicated_configuration_v1.

Посмотрите подробное описание ресурса selectel_vpc_project_v2.

3. Получить ID локации

data "selectel_dedicated_location_v1" "server_location" {
project_id = selectel_vpc_project_v2.project_1.id
filter {
name = "SPB-2"
}
}

Здесь filter — фильтр списка локаций:

  • name — пул, в котором будет создан выделенный сервер, например SPB-2. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.

Посмотрите подробное описание источника данных selectel_dedicated_location_v1.

4. Получить образ ОС

data "selectel_dedicated_os_v1" "server_os" {
project_id = selectel_vpc_project_v2.project_1.id
filter {
name = "Ubuntu"
version = "2404"
configuration_id = data.selectel_dedicated_configuration_v1.server_config.configurations[0].id
location_id = data.selectel_dedicated_location_v1.server_location.locations[0].id
}
}

Здесь filter — фильтр списка ОС:

  • name — имя семейства ОС, например Ubuntu. Вы можете создать сервер без ОС, для этого укажите noos и не указывайте версию. Список доступных ОС можно посмотреть в инструкции Образы ОС для установки;
  • version — версия образа. Посмотреть версию образа ОС можно с помощью API метода List OS configurations.

Посмотрите подробное описание источника данных selectel_dedicated_os_v1.

5. Создать выделенный сервер

resource "selectel_dedicated_server_v1" "server_1" {
project_id = selectel_vpc_project_v2.project_1.id
configuration_id = data.selectel_dedicated_configuration_v1.server_config.configurations[0].id
location_id = data.selectel_dedicated_location_v1.server_location.locations[0].id
os_id = data.selectel_dedicated_os_v1.server_os.os[0].id
price_plan_name = "1 день"
}

Здесь price_plan_name — тарифный план, например 1 день. Посмотреть названия тарифных планов можно с помощью API метода Price Plans.

Посмотрите подробное описание ресурса selectel_dedicated_servers_server_v1.