Перенести виртуальную машину в другой каталог
При создании виртуальной машины она размещается в текущем каталоге.
В Yandex Cloud есть возможность переместить виртуальную машину в другой каталог внутри одного облака. Останавливать виртуальную машину при переносе не обязательно.
Подробнее об иерархии ресурсов в Yandex Cloud.
Ограничения
Ограничения при переносе виртуальной машины:
- Метрики в Yandex Monitoring не переносятся. То, что было в предыдущем каталоге, останется в нем, новые метрики будут создаваться уже в новом каталоге.
- Перенос возможен только внутри одного облака.
Перенести виртуальную машину
Изменить каталог ВМ
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Получите список всех виртуальных машин в каталоге по умолчанию:
yc compute instance list
Результат:
+----------------------+-----------------+---------------+---------+----------------------+ | ID | NAME | ZONE ID | STATUS | DESCRIPTION | +----------------------+-----------------+---------------+---------+----------------------+ | fhm0b28lgfp4******** | first-instance | ru-central1-a | RUNNING | my first vm via CLI | | fhm9gk85nj7g******** | second-instance | ru-central1-a | RUNNING | my second vm via CLI | +----------------------+-----------------+---------------+---------+----------------------+
-
Получите список всех каталогов в облаке по умолчанию:
yc resource-manager folder list
Результат:
+----------------------+--------------------+------------------+--------+ | ID | NAME | LABELS | STATUS | +----------------------+--------------------+------------------+--------+ | b1gd129pp9ha******** | my-folder | | ACTIVE | | b1g66mft1vop******** | default | | ACTIVE | +----------------------+--------------------+------------------+--------+
-
Посмотрите описание команды CLI для переноса виртуальной машины:
yc compute instance move --help
-
Перенесите виртуальную машину в другой каталог со следующими параметрами:
- в параметре
id
укажите идентификатор виртуальной машины, напримерfhm0b28lgfp4********
; - в параметре
destination-folder-id
укажите идентификатор целевого каталога, напримерb1gd129pp9ha********
.
yc compute instance move \ --id fhm0b28lgfp4******** \ --destination-folder-id b1gd129pp9ha********
Подробнее о команде
yc compute instance move
см. в справочнике CLI. - в параметре
Воспользуйтесь методом REST API move для ресурса Instance или вызовом gRPC API InstanceService/Move.
Пример
Ниже описан пример Bash-скрипта для ОС Linux.
Чтобы воспользоваться примером, аутентифицируйтесь в API и установите утилиту cURL
Переносить ВМ можно без ее остановки.
-
Создайте файл для скрипта:
sudo touch <имя_файла>
-
Откройте файл для записи:
sudo nano <имя_файла>
-
Поместите скрипт в файл:
#!/bin/bash # Создание переменных export IAM_TOKEN=`yc iam create-token` instanceId='<идентификатор_ВМ>' bootDiskId='<идентификатор_загрузочного_диска_ВМ>' destinationFolderId='<идентификатор_каталога>' # Перемещение ВМ curl \ --request POST \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '{ "destinationFolderId": "'"${destinationFolderId}"'" }' \ "https://compute.api.cloud.yandex.net/compute/v1/instances/{${instanceId}}:move" # Перемещение загрузочного диска curl \ --request POST \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '{ "destinationFolderId": "'"${destinationFolderId}"'" }' \ "https://compute.api.cloud.yandex.net/compute/v1/disks/{${bootDiskId}}:move"
Где:
IAM_TOKEN
— IAM-токен для аутентификации в API.instanceId
— идентификатор ВМ, которую надо перенести.bootDiskId
— идентификатор загрузочного диска переносимой ВМ.destinationFolderId
— идентификатор каталога, в который будет перенесена ВМ.
-
Сделайте файл исполняемым:
chmod +x <имя_файла>
-
Выполните скрипт:
./<имя_файла>
Изменить подсеть ВМ
После переноса сетевые интерфейсы ВМ остаются подключены к подсетям исходного каталога. Чтобы подключить ВМ к подсетям каталога назначения:
- В консоли управления
выберите каталог, в который была перемещена ВМ. - Выберите сервис Compute Cloud.
- Нажмите на имя нужной ВМ.
- Нажмите кнопку Остановить.
- В открывшемся окне нажмите кнопку Остановить.
- В секции Сеть в правом верхнем углу блока нужного сетевого интерфейса нажмите
и выберите Изменить. - В поле Подсеть выберите новую подсеть и нажмите Сохранить.
Если у ВМ несколько сетевых интерфейсов, измените подсеть для каждого из них. - Нажмите кнопку Запустить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для изменения подсети:
yc compute instance update-network-interface --help
-
Остановите ВМ:
yc compute instance stop fhm0b28lgfp4********
-
Получите список сетевых интерфейсов ВМ, указав ее идентификатор:
yc compute instance get fhm0b28lgfp4********
Результат:
... network_interfaces: - index: "0" mac_address: d0:0d:24:**:**:** subnet_id: e2lpp96bvvgp******** primary_v4_address: address: 192.168.2.23 - index: "1" mac_address: d0:1d:24:**:**:** subnet_id: e2lrucutusnd******** primary_v4_address: address: 192.168.1.32 - index: "2" mac_address: d0:2d:24:**:**:** subnet_id: e2lv9c6aek1d******** primary_v4_address: address: 192.168.4.26 ...
Сохраните значение поля
index
— номер сетевого интерфейса, который требуется подключить к другой подсети. -
Выполните команду:
yc compute instance update-network-interface fhm0b28lgfp4******** \ --subnet-id e2lfibapq818******** \ --ipv4-address auto \ --network-interface-index 0 \ --security-group-id enpi8m85mj14********
Где:
--subnet-id
— подсеть в каталоге назначения.--ipv4-address
— внутренний IP-адрес сетевого интерфейса ВМ в подсети в каталоге назначения. Задайте значениеauto
, чтобы внутренний адрес был присвоен автоматически.--network-interface-index
— охраненный ранее номер сетевого интерфейса ВМ.--security-group-id
— группа безопасности, которая будет назначена сетевому интерфейсу ВМ.
Результат:
done (9s) id: fhm0b28lgfp4******** folder_id: b1gd73mbrli7******** created_at: "2023-11-16T06:09:46Z" name: oslogigor1 zone_id: ru-central1-a platform_id: standard-v3 resources: memory: "2147483648" cores: "2" core_fraction: "100" status: STOPPED metadata_options: gce_http_endpoint: ENABLED aws_v1_http_endpoint: ENABLED gce_http_token: ENABLED aws_v1_http_token: DISABLED boot_disk: mode: READ_WRITE device_name: epdophaf2gh9******** auto_delete: true disk_id: epdophaf2gh9******** network_interfaces: - index: "0" mac_address: d0:0d:24:**:**:** subnet_id: e2lfibapq818******** primary_v4_address: address: 10.129.0.22 security_group_ids: - enpi8m85mj14******** - index: "1" mac_address: d0:1d:24:**:**:** subnet_id: e2lrucutusnd******** primary_v4_address: address: 192.168.1.32 - index: "2" mac_address: d0:2d:24:**:**:** subnet_id: e2lv9c6aek1d******** primary_v4_address: address: 192.168.4.26 gpu_settings: {} fqdn: relocated-vm.ru-central1.internal scheduling_policy: {} network_settings: type: STANDARD placement_policy: {}
Если у ВМ несколько сетевых интерфейсов, измените подсеть для каждого из них.
-
Запустите ВМ:
yc compute instance start fhm0b28lgfp4********
Воспользуйтесь методом REST API updateNetworkInterface для ресурса Instance или вызовом gRPC API InstanceService/UpdateNetworkInterface.