5.5 KiB
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-cloudinitUbuntu_22-20GDebian_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>