--- description: Управление виртуальными машинами (VM) в облаке Nubes keywords: 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 может вернуть ошибку, если имя занято остановленной ВМ). ## Пример использования ```text # Пример создания 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 = < 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: ```bash terraform import nubes_vm_instance.my_vm ```