microsrv:~$
Консоль

Справочник сущностей и ресурсов

Полный справочник ресурсов провайдера microsrv для OpenTofu: виртуальные машины, контейнеры, диски, VPC, шлюзы, балансировщики и WireGuard.

Обзор ресурсов

Провайдер microsrv предоставляет набор декларативных ресурсов, полностью покрывающих архитектуру облачной платформы. Все ресурсы поддерживают автоматическое отслеживание зависимостей и корректное удаление при tofu destroy.


1. Проекты и ключи доступа

microsrv_project

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

resource "microsrv_project" "prod" {
  name = "production-workloads"
}
  • name (string, обязательный) — уникальное имя проекта. Изменение имени приводит к пересозданию ресурса (ForceNew).

microsrv_ssh_key

Публичный SSH-ключ пользователя для авторизации на виртуальных машинах и в контейнерах.

resource "microsrv_ssh_key" "deployer" {
  name       = "deployer-key"
  public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG... deployer@ci"
}
  • name (string, обязательный) — понятное имя ключа.
  • public_key (string, обязательный) — строка открытого ключа (RSA или ED25519). Изменение приводит к пересозданию (ForceNew).

2. Сетевая инфраструктура

microsrv_vpc

Изолированная приватная сеть (VPC) с высокопроизводительной eBPF-маршрутизацией и встроенным Outbound NAT.

resource "microsrv_vpc" "app_net" {
  project_id = microsrv_project.prod.id
  region_id  = data.microsrv_region.central.id
  cidr       = "10.42.0.0/24"
}
  • project_id (string, обязательный) — ID проекта.
  • region_id (string, обязательный) — ID региона размещения.
  • cidr (string, обязательный) — блок IPv4-адресов подсети с маской /24 (например, 10.42.0.0/24).

microsrv_network_interface

Сетевой интерфейс для подключения виртуальной машины, контейнера или пира к VPC.

resource "microsrv_network_interface" "eth0" {
  project_id = microsrv_project.prod.id
  vpc_id     = microsrv_vpc.app_net.id
  # ip_address = "10.42.0.15" # Необязательно: фиксированный статический IP
}
  • project_id (string, обязательный) — ID проекта.
  • vpc_id (string, обязательный) — ID виртуальной сети.
  • ip_address (string, опционально) — статический IP-адрес из диапазона VPC. Если опущен, платформа автоматически назначает первый свободный адрес. Изменение приводит к пересозданию интерфейса.

3. Блочные диски и хранилище

microsrv_volume

Блочное хранилище на реплицируемых NVMe-накопителях. Поддерживает создание загрузочных дисков (через clone_from) и чистых томов данных.

# Загрузочный диск для виртуальной машины
resource "microsrv_volume" "boot_disk" {
  project_id = microsrv_project.prod.id
  region_id  = data.microsrv_region.central.id
  size_mib   = 20480 # 20 ГБ
  clone_from = data.microsrv_image.ubuntu.code
}

# Дополнительный диск данных для баз данных или логов
resource "microsrv_volume" "data_disk" {
  project_id = microsrv_project.prod.id
  region_id  = data.microsrv_region.central.id
  size_mib   = 51200 # 50 ГБ
}
  • project_id, region_id (string, обязательные) — привязка к проекту и региону.
  • size_mib (number, обязательный) — размер диска в мегабайтах (квант 512 МиБ).
  • clone_from (string, опционально) — символьный код базового образа ОС (например, ubuntu-noble). Делает диск загрузочным и неизменяемым по структуре.
  • attached_to (string, только для чтения) — ID инстанса, к которому подключён том.

4. Виртуальные машины (Compute)

microsrv_vm

Полноценная KVM-виртуальная машина с поддержкой живой миграции и режима scale-from-zero.

resource "microsrv_vm" "backend" {
  project_id            = microsrv_project.prod.id
  region_id             = data.microsrv_region.central.id
  flavor_id             = data.microsrv_flavor.std.id
  class                 = "shared" # или "guaranteed"
  name                  = "backend-api"
  boot_volume_id        = microsrv_volume.boot_disk.id
  network_interface_ids = [microsrv_network_interface.eth0.id]
  ssh_key_ids           = [microsrv_ssh_key.deployer.id]
  volume_ids            = [microsrv_volume.data_disk.id]
  serverless            = false
}
  • flavor_id (string, обязательный) — конфигурация ресурсов. Для виртуальных машин требуются тарифы уровня от std.1c2g (минимум 1 vCPU / 2 GiB RAM).
  • class (string, обязательный) — класс планирования ("shared" с овербукингом или "guaranteed" с выделенными ядрами).
  • boot_volume_id (string, обязательный) — загрузочный том microsrv_volume, созданный с параметром clone_from. В microsrv загрузочный диск всегда объявляется как отдельный ресурс.
  • serverless (bool, опционально) — включение режима засыпания (чекпоинт памяти при бездействии и пробуждение по первому входящему TCP-пакету).
  • При destroy виртуальная машина отключается от томов, а сами тома остаются в сохранности до удаления их собственных ресурсов.

5. Изолированные контейнеры (gVisor)

microsrv_container_image

Предварительная загрузка и валидация OCI-образа из внешнего или публичного реестра.

resource "microsrv_container_image" "nginx" {
  project_id = microsrv_project.prod.id
  region_id  = data.microsrv_region.central.id
  ref        = "nginx:1.27-alpine"
}
  • ref (string, обязательный) — тег или дайджест OCI-образа (Docker Hub, GHCR, etc.). Ресурс переходит в статус READY после завершения загрузки.

microsrv_container

Защищённый контейнер в песочнице Google gVisor с постоянным хранилищем Stateful OverlayFS.

resource "microsrv_container" "web" {
  project_id            = microsrv_project.prod.id
  region_id             = data.microsrv_region.central.id
  flavor_id             = data.microsrv_flavor.micro.id # поддерживаются микро-тарифы 512 МБ
  class                 = "shared"
  image_id              = microsrv_container_image.nginx.id
  name                  = "nginx-proxy"
  command               = ["nginx", "-g"]
  args                  = ["daemon off;"]
  env                   = { "ENV" = "production" }
  restart_policy        = "always"
  user                  = "root"
  volume_ids            = [microsrv_volume.data_disk.id]
  network_interface_ids = [microsrv_network_interface.eth0.id]
  ssh_key_ids           = [microsrv_ssh_key.deployer.id]
  serverless            = true
}
  • command, args (list of string, опционально) — переопределение точки входа. Если пустые, используются стандартные ENTRYPOINT/CMD из OCI-образа.
  • volume_ids (list of string, опционально) — тома данных для сохранения состояния между перезапусками (Stateful OverlayFS).
  • serverless (bool, опционально) — автоматический scale-to-zero при отсутствии сетевого трафика.

6. Шлюзы и публикация сервисов

microsrv_gateway_route

Публикация сервисов на глобальных периметровых шлюзах платформы без выделения публичных IPv4-адресов гостевым машинам.

# Маршрут для подключения по SSH через шлюз msrv.space
resource "microsrv_gateway_route" "vm_ssh" {
  project_id = microsrv_project.prod.id
  compute_id = microsrv_vm.backend.id
  protocol   = "ssh"
}

# Маршрут для публикации веб-сервиса по протоколу HTTP/HTTPS
resource "microsrv_gateway_route" "web_http" {
  project_id  = microsrv_project.prod.id
  compute_id  = microsrv_container.web.id
  protocol    = "http"
  target_port = 80 # порт внутри контейнера
  comment     = "Public web entrypoint"
}

# Сквозной TLS SNI passthrough с поддержкой PROXY Protocol
resource "microsrv_gateway_route" "custom_tls" {
  project_id     = microsrv_project.prod.id
  compute_id     = microsrv_vm.backend.id
  protocol       = "tls"
  sni_domain     = "api.mycompany.com"
  proxy_protocol = "v2"
}
  • compute_id (string, обязательный) — ID виртуальной машины или контейнера.
  • protocol (string, обязательный) — "ssh", "http" или "tls".
  • target_port (number, опционально) — внутренний порт приложения для протокола http.
  • sni_domain (string, опционально) — доменное имя для SNI-маршрутизации (для протокола tls).
  • proxy_protocol (string, опционально) — "v1" или "v2" для передачи реального IP клиента.

7. Балансировщики нагрузки

microsrv_load_balancer

L4 TCP-балансировщик нагрузки с собственным выделенным виртуальным IP (VIP) в приватной сети VPC.

resource "microsrv_load_balancer" "lb" {
  project_id = microsrv_project.prod.id
  vpc_id     = microsrv_vpc.app_net.id
  vip        = "10.42.0.100"

  listeners = [
    {
      protocol    = "tcp"
      listen_port = 80
      target_port = 80
      algorithm   = "round_robin"
    },
    {
      protocol    = "tcp"
      listen_port = 443
      target_port = 443
      algorithm   = "source_ip"
    }
  ]

  backends = [
    microsrv_vm.backend.id,
    microsrv_vm.backend_replica.id,
  ]

  health_check = {
    protocol    = "tcp"
    port        = 80
    interval_ms = 1000
    timeout_ms  = 500
  }
}
  • vip (string, обязательный) — выделенный IPv4-адрес в подсети VPC.
  • listeners (list of objects) — правила проксирования портов и алгоритмы балансировки ("round_robin", "source_ip").
  • backends (list of string) — список ID целевых виртуальных машин.
  • health_check (object) — параметры проверки доступности бэкендов.

8. Защищённые каналы WireGuard

microsrv_wireguard_peer

Точка подключения клиента к приватной сети VPC через зашифрованный туннель WireGuard.

resource "microsrv_wireguard_peer" "dev_laptop" {
  project_id           = microsrv_project.prod.id
  network_interface_id = microsrv_network_interface.eth0.id
  public_key           = var.wireguard_public_key
  comment              = "MacBook Pro Dmitrii"
}

output "wireguard_connection_info" {
  value = {
    peer_id    = microsrv_wireguard_peer.dev_laptop.id
    status     = microsrv_wireguard_peer.dev_laptop.status
  }
}
  • network_interface_id (string, обязательный) — сетевой интерфейс в VPC.
  • public_key (string, обязательный) — 32-байтный публичный ключ X25519 в кодировке base64.

Экспорт HCL из Консоли («Copy as Code»)

Если вы настроили виртуальную машину, контейнер или сеть через веб-интерфейс, вам не нужно вручную писать конфигурацию OpenTofu:

  1. Откройте карточку любого ресурса в Консоли.
  2. Перейдите на вкладку IaC (или нажмите кнопку Copy as Code в мастере создания).
  3. Скопируйте готовый фрагмент HCL, сгенерированный в строгом соответствии со стандартом terraform fmt.

Следующие шаги