Telegram
+998 (71) 205-80-00

Terraform на serverplus: инфраструктура как код

Опубликовано: 25.07.26
Поделиться

Что такое Terraform на serverplus

serverplus построен на OpenStack, поэтому его инфраструктурой можно управлять как кодом с помощью официального провайдера terraform-provider-openstack. Вы описываете серверы, сети и правила в .tf-файлах, а Terraform (или совместимый OpenTofu) приводит облако к нужному состоянию: повторяемо, с ревью в git и возможностью откатиться.

Что понадобится

  • Terraform или OpenTofu установлен локально (или в CI).
  • Application credentials (id + secret) из панели — раздел «Управление доступом». Это безопаснее пароля аккаунта.
  • Файл ~/.config/openstack/clouds.yaml с блоком доступа (тот же, что для CLI).
clouds:
  serverplus:
    auth_type: v3applicationcredential
    auth:
      auth_url: https://identity.serverplus.uz/v3
      application_credential_id: <ID>
      application_credential_secret: <SECRET>
    region_name: RegionOne
    interface: public
    identity_api_version: 3

Настройка провайдера

Минимальный versions.tf и провайдер, который берёт доступ прямо из clouds.yaml:

terraform {
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 3.0"
    }
  }
}

provider "openstack" {
  cloud = "serverplus"
}

Первый сервер

Пример main.tf: SSH-ключ, security group с открытым 22 портом, виртуальная машина в приватной сети и внешний (floating) IP.

resource "openstack_compute_keypair_v2" "kp" {
  name       = "tf-key"
  public_key = file("~/.ssh/id_rsa.pub")
}

resource "openstack_networking_secgroup_v2" "web" {
  name = "tf-web"
}

resource "openstack_networking_secgroup_rule_v2" "ssh" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  port_range_min    = 22
  port_range_max    = 22
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = openstack_networking_secgroup_v2.web.id
}

resource "openstack_compute_instance_v2" "vm" {
  name            = "tf-vm-1"
  image_name      = "Ubuntu 22.04"
  flavor_name     = "m1.small"
  key_pair        = openstack_compute_keypair_v2.kp.name
  security_groups = [openstack_networking_secgroup_v2.web.name]
  network { name = "private" }
}

Про сеть. Сервер должен быть в сети с роутером и внешним шлюзом, иначе у него не будет интернета. Точные имена образа, flavor и сетей возьмите из панели или командами openstack image list, openstack flavor list, openstack network list.

Запуск

export OS_CLOUD=serverplus
terraform init
terraform plan
terraform apply

terraform destroy   # удалить всё, что создано

Безопасность

  • State-файл — секрет. В terraform.tfstate попадают пароли и ключи. Не коммитьте его в git; храните в защищённом backend (например, в S3-хранилище serverplus) с шифрованием.
  • Используйте application credentials, а не пароль аккаунта — их можно отозвать в один клик.
  • Секреты передавайте через переменные и окружение (TF_VAR_...), а не хардкодом в .tf.

Частые вопросы

Провайдер не аутентифицируется. Проверьте OS_CLOUD=serverplus и корректность clouds.yaml (identity_api_version: 3).

Terraform не находит образ или flavor. Имена должны совпадать точно — сверьтесь с openstack image list и openstack flavor list.

Не выдаётся floating IP. Уточните имя внешней сети (пула): openstack network list --external.

Рекомендуем
Подберём лучшее решение под ваш проект
Заполните данные и с вами свяжется менеджер для подтверждения
Номер тех. поддержки
+998 (71) 205-80-00
Email для связи
info@serverplus.uz
Часы работы
Как вам удобнее получить консультацию?
Что вас интересует? (необязательно)
Бесплатная консультация
Ответит инженер, а не оператор
Без спама и навязчивых продаж
Хотите сначала попробовать самостоятельно?Каждому новому пользователю начисляется 100 000 сум бонусов для тестирования VPS, Dedicated Server, S3-хранилища и Kubernetes.
Зарегистрироваться и получить бонус
Мы не передаем ваши данные третьим лицам
Подпишитесь на нашу рассылку

Будьте одними из первых, кто узнает новости из сферы хостингов