Files
tf_provider/docs/30_registry/resources/vm.md
T
2026-06-30 15:45:24 +04:00

5.5 KiB

description, keywords
description keywords
Управление виртуальными машинами (VM) в облаке Nubes vm, virtual machine, nubes, compute, ec2

nubes_vm_instance

Ресурс nubes_vm_instance позволяет создавать, изменять и управлять жизненным циклом виртуальных машин в облаках Nubes.

Обзор

Виртуальные машины создаются внутри vApp (vapp_uid). Поддерживаются операции изменения ресурсов (CPU, RAM) и сетевых настроек "на лету" (в зависимости от ОС и типа изменений может потребоваться перезагрузка, но Terraform выполняет операцию modify).

Особенности удаления (Deletion Protection)

По умолчанию для предотвращения случайной потери данных включена защита от удаления (deletion_protection = true).

  • terraform destroy (при deletion_protection = true): Ресурс удаляется только из стейта Terraform. В облаке ВМ продолжает работать.
  • terraform destroy (при deletion_protection = false): ВМ переводится в состояние SUSPEND (останавливается). Это аналог "карантина". Полное удаление происходит автоматически через 14 дней. Если вы создадите ресурс заново с тем же именем, Terraform попытается создать новую ВМ (API может вернуть ошибку, если имя занято остановленной ВМ).

Пример использования

# Пример создания Linux VM
resource "nubes_vm_instance" "web_server" {
  # Привязка к vApp
  vapp_uid     = nubes_vapp.main_vapp.id
  
  # Основные параметры
  vm_name      = "web-server-01"
  description  = "Frontend Nginx Server"
  
  # Ресурсы
  vm_cpu       = 2
  vm_ram       = 4     # GB
  vm_disk      = 50    # Дополнительный диск GB (опционально)
  
  # Образ и Доступ
  image_vm        = "Ubuntu_22-20G"
  user_login      = "ubuntu"
  user_public_key = "ssh-ed25519 AAAAC3Nz..."
  
  # Сеть и Безопасность
  ip_space_name   = "no-needed" # Или имя IP Space для внешнего IP
  
  # Списки доступа (White Lists)
  access_port_list = jsonencode(["22", "80", "443"])
  access_ip_list   = jsonencode(["1.2.3.4", "10.0.0.0/8"]) # Оставьте пустым для доступа отовсюду
  
  # Мониторинг
  need_add_zabbix_template = true
  
  # Кастомизация
  cloud_init = <<EOH
#cloud-config
packages:
  - nginx
runcmd:
  - systemctl enable --now nginx
EOH

  # Политика удаления (false = suspend при destroy)
  deletion_protection = false
}

Аргументы (Arguments)

Обязательные (Required)

  • vapp_uid (String) - UUID целевого vApp (контейнера для ВМ).
  • vm_name (String) - Уникальное имя виртуальной машины.
  • vm_cpu (Int) - Количество ядер процессора (vCPU). Должно быть > 0.
  • vm_ram (Int) - Объем оперативной памяти (GB). Должно быть > 0.
  • image_vm (String) - Образ ОС. Примеры:
    • RockyLinux_9-16G-cloudinit
    • Ubuntu_22-20G
    • Debian_13-20G
  • user_login (String) - Имя пользователя для SSH доступа (sudoer).
  • user_public_key (String) - Публичный SSH ключ (OpenSSH format).
  • access_port_list (String/JSON) - JSON-список открытых портов (TCP). Пример: jsonencode(["22", "80"]).
  • need_add_zabbix_template (Bool) - Добавлять ли ВМ в мониторинг Zabbix.

Опциональные (Optional)

  • vm_disk (Int) - Размер дополнительного диска данных (GB).
  • access_ip_list (String/JSON) - JSON-список разрешенных IP-адресов. Если не указан или пуст, доступ разрешен со всех IP (0.0.0.0/0).
  • ip_space_name (String) - Настройка внешнего IP. Укажите "no-needed" для отключения public IP.
  • cloud_init (String) - YAML конфигурация cloud-init. Позволяет устанавливать пакеты, создавать пользователей и файлы при первом старте.
    • Примечание: Не используйте долгие операции (таймаут 5 мин).
  • deletion_protection (Bool) - Защита от удаления. Default: true.
    • true: terraform destroy = forget state (ВМ жива).
    • false: terraform destroy = suspend (ВМ выключена, карантин 14 дней).

Только для чтения (Read-Only)

  • id (String) - UUID созданной виртуальной машины.
  • status (String) - Текущий статус (например, running, suspended, poweroff).

Импорт

Импорт существующей ВМ осуществляется по её UUID:

terraform import nubes_vm_instance.my_vm <vm_uuid>