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

108 lines
5.5 KiB
Markdown

---
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 = <<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:
```bash
terraform import nubes_vm_instance.my_vm <vm_uuid>
```