108 lines
5.5 KiB
Markdown
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>
|
|
```
|