Перенести виртуальную машину в другой каталог
При создании виртуальной машины она размещается в текущем каталоге.
В Yandex Cloud есть возможность переместить виртуальную машину в другой каталог внутри одного облака. Останавливать виртуальную машину при переносе не обязательно.
Подробнее об иерархии ресурсов в Yandex Cloud.
Ограничения
Ограничения при переносе виртуальной машины:
- Метрики в Yandex Monitoring не переносятся. То, что было в предыдущем каталоге, останется в нем, новые метрики будут создаваться уже в новом каталоге.
- Перенос возможен только внутри одного облака.
Перенести виртуальную машину
Изменить каталог ВМ
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Получите список всех виртуальных машин в каталоге по умолчанию:
yc compute instance listРезультат:
+----------------------+-----------------+---------------+---------+----------------------+ | ID | NAME | ZONE ID | STATUS | DESCRIPTION | +----------------------+-----------------+---------------+---------+----------------------+ | fhm0b28lgfp4******** | first-instance | kz1-a | RUNNING | my first vm via CLI | | fhm9gk85nj7g******** | second-instance | kz1-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. - в параметре
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Настройте права доступа к целевому каталогу. У аккаунта из исходного каталога, от имени которого вы будете выполнять операцию, должна быть минимальная роль
compute.editorна целевой каталог. -
В конфигурационном файле в ресурсе
yandex_compute_instanceдобавьте параметры:resource "yandex_compute_instance" "vm-1" { ... allow_stopping_for_update = true folder_id = <идентификатор_целевого_каталога> ... }Где:
allow_stopping_for_update— параметр для разрешения остановки ВМ на время обновления.folder_id— идентификатор каталога, в котором должна размещаться ВМ (по умолчанию указывается из переменной окружения).
Более подробную информацию о параметрах ресурса
yandex_compute_instanceсм. в документации провайдера. -
Примените новую конфигурацию:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Terraform обновит все требуемые ресурсы. Проверить изменения можно в консоли управления
. -
Воспользуйтесь методом 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.yandexcloud.kz/compute/v1/instances/{${instanceId}}:move" # Перемещение загрузочного диска curl \ --request POST \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '{ "destinationFolderId": "'"${destinationFolderId}"'" }' \ "https://compute.api.yandexcloud.kz/compute/v1/disks/{${bootDiskId}}:move"Где:
IAM_TOKEN— IAM-токен для аутентификации в API.instanceId— идентификатор ВМ, которую надо перенести.bootDiskId— идентификатор загрузочного диска переносимой ВМ.destinationFolderId— идентификатор каталога, в который будет перенесена ВМ.
-
Сделайте файл исполняемым:
chmod +x <имя_файла> -
Выполните скрипт:
./<имя_файла>
Изменить подсеть ВМ
После переноса сетевые интерфейсы ВМ остаются подключены к подсетям исходного каталога. Чтобы подключить ВМ к подсетям каталога назначения:
- В консоли управления
выберите каталог, в который была перемещена ВМ. - Перейдите в сервис Compute Cloud.
- Нажмите на имя нужной ВМ.
- Нажмите кнопку Остановить.
- В открывшемся окне нажмите кнопку Остановить.
- В секции Сеть в правом верхнем углу блока нужного сетевого интерфейса нажмите
и выберите Изменить. - В поле Подсеть выберите новую подсеть и нажмите Сохранить.
Если у ВМ несколько сетевых интерфейсов, измените подсеть для каждого из них. - Нажмите кнопку Запустить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --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: kz1-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.kz1.internal scheduling_policy: {} network_settings: type: STANDARD placement_policy: {}Если у ВМ несколько сетевых интерфейсов, измените подсеть для каждого из них.
-
Запустите ВМ:
yc compute instance start fhm0b28lgfp4********
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Настройте права доступа к каталогу, в котором вы изменяете подсеть ВМ. У аккаунта, от имени которого вы будете выполнять операцию, должна быть минимальная роль
vpc.adminна этот каталог. -
Если дополнительная подсеть уже создана, получите ее идентификатор.
-
В конфигурационном файле измените ресурс
yandex_compute_instance:resource "yandex_compute_instance" "vm-1" { ... network_interface { subnet_id = "<идентификатор_подсети>" } allow_stopping_for_update = true ... }Где:
subnet_id— идентификатор подсети.allow_stopping_for_update— параметр для разрешения остановки ВМ на время обновления.
Более подробную информацию о параметрах ресурса
yandex_compute_instanceсм. в документации провайдера. -
Примените новую конфигурацию:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Terraform обновит все требуемые ресурсы. Проверить изменения можно в консоли управления
. -
Воспользуйтесь методом REST API updateNetworkInterface для ресурса Instance или вызовом gRPC API InstanceService/UpdateNetworkInterface.