Перемещение ресурсов Azure в новую группу ресурсов или подписку
В этой статье объясняется, как перемещать ресурсы Azure между группами ресурсов в одной подписке или в разных подписках. Если перемещение включает разные подписки, обе подписки должны быть частью одного клиента Идентификатора Microsoft Entra. Для перемещения ресурсов можно использовать такие средства, как портал Azure, Azure PowerShell, Azure CLI, REST API или Python.
Во время операции перемещения группы исходных и целевых ресурсов блокируются, что означает, что вы не можете создавать, удалять или обновлять ресурсы в этих группах ресурсов во время выполнения перемещения. Однако существующие ресурсы остаются полностью операционными. Например, если вы перемещаете виртуальную машину из одной группы ресурсов в другую, ее свойства (например, размер) нельзя изменить во время перемещения. Несмотря на это, виртуальная машина продолжает работать обычно, и службы, использующие ее, не испытывают дополнительных простоев. Блокировка может длиться до четырех часов, большинство ходов завершается быстрее, и блокировка удаляется соответствующим образом.
В запросе перемещения должны быть указаны только ресурсы верхнего уровня (родителя). Дочерние ресурсы автоматически перемещаются вместе с родительскими ресурсами, но не могут быть перемещены независимо. Например, родительский ресурс может быть перемещен и его дочерний ресурс Microsoft.Compute/virtualMachines
, например Microsoft.Compute/virtualMachines/extensions
перемещение с ним. Однако дочерний ресурс нельзя переместить самостоятельно.
При перемещении ресурса сохраняются зависимости с дочерними ресурсами, зависимости с другими ресурсами могут прерываться и могут быть настроены снова. Перемещение ресурса изменяет только связанную группу ресурсов и не изменяет физический регион ресурса.
Примечание.
Ресурсы Azure нельзя переместить, если блокировка только для чтения существует в исходной, целевой группе ресурсов или подписке.
Изменение идентификатора ресурса
При перемещении ресурса изменяется его идентификатор. Стандартный формат для идентификатора ресурса — /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
. При перемещении ресурса в новую группу ресурсов или подписку вы изменяете одно или несколько значений в этом пути.
Если вы используете идентификатор ресурса в любом месте, необходимо изменить это значение. Например, если на портале есть пользовательская панель мониторинга , ссылающаяся на идентификатор ресурса, необходимо обновить это значение. Найдите скрипты или шаблоны, которые необходимо обновить для нового идентификатора ресурса.
Рекомендации перед перемещением ресурсов
Некоторые важные шаги предшествуют перемещению ресурса. При проверке этих условий можно избежать ошибок.
Исходная и целевая подписки должны быть активными. Если у вас возникли проблемы с включением учетной записи, которая была отключена, создайте запрос поддержка Azure. Выберите тип проблемы Управление подпиской.
Исходная и целевая подписка должны существовать в пределах одного клиента Microsoft Entra. Используйте Azure CLI или PowerShell, чтобы убедиться, что обе подписки имеют один и тот же идентификатор клиента.
az account show --subscription <your-source-subscription> --query tenantId az account show --subscription <your-destination-subscription> --query tenantId
Если идентификаторы клиента для исходных и целевых подписок не совпадают, используйте следующие методы для их согласования:
Если вы пытаетесь переместить ресурсы в партнер поставщик облачных решений (CSP) или из него, дополнительные сведения см. в статье "Передача подписок Azure между подписчиками и поставщиками служб csps".
Ресурсы, которые требуется переместить, должны поддерживать операцию перемещения. Ознакомьтесь с типами ресурсов Azure для операций перемещения для списка ресурсов, которые поддерживают операции перемещения.
Так как некоторые службы имеют определенные ограничения или требования при перемещении ресурсов, ознакомьтесь со следующим руководством по перемещению перед перемещением ресурсов в этих службах:
- При использовании Azure Stack Hub перемещать ресурсы между группами нельзя.
- Службы приложений Azure
- Azure DevOps Services
- Классическая модель развертывания для классических вычислений, хранилища, виртуальных сетей и облачных служб
- Облачные службы (расширенная поддержка)
- Сеть
- Службы восстановления Azure
- Виртуальные машины
- См. статью "Перемещение подписок " для перемещения подписки Azure в новую группу управления.
Подписка назначения должна быть зарегистрирована для перемещаемого поставщика ресурсов. В противном случае отображается сообщение о том, что подписка не зарегистрирована для типа ресурса. Эта ошибка может возникнуть при перемещении ресурса в новую подписку, которая никогда не использовалась с этим типом ресурса.
Чтобы получить состояние регистрации:
az account set -s <destination-subscription-name-or-id> az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table
Чтобы зарегистрировать поставщик ресурсов сделайте следующее:
az provider register --namespace Microsoft.Batch
Перед началом операции перемещения проверьте квоту подписки на подписку, в которую перемещаются ресурсы. Убедитесь, что вы можете запросить увеличение квоты, которая приведет к превышению предела целевой подписки. Дополнительные сведения об ограничениях и ограничениях для подписки и служб Azure см. в подробном руководстве по ограничениям и способам запроса на увеличение.
Учетная запись, используемая для перемещения ресурсов, должна предоставлять по крайней мере следующие разрешения:
- В исходной группе ресурсов: Microsoft.Resources/subscriptions/resourceGroups/moveResources/action
- В целевой группе ресурсов: Microsoft.Resources/subscriptions/resourceGroups/write
При перемещении ресурса с активным назначением ролей Azure (или дочерним ресурсом с этим же назначением), назначение роли не перемещается и становится потерянным. После перемещения необходимо снова создать назначение роли. В конечном итоге назначение роли потерянных ролей автоматически удаляется, но рекомендуется удалить назначение роли перед перемещением.
Дополнительные сведения об управлении назначениями ролей см. в статье "Перечисление назначений ролей Azure" и назначение ролей Azure.
Для перемещения между подписками ресурс и его зависимые ресурсы должны находиться в одной группе ресурсов, а также они должны перемещаться вместе. Например, для виртуальной машины с управляемыми дисками потребуется перемещение виртуальных машин и управляемых дисков вместе с другими зависимыми ресурсами.
Если вы перемещаете ресурс в новую подписку, проверьте, имеет ли ресурс какие-либо зависимые ресурсы, и если они находятся в той же группе ресурсов. Если ресурсы не в одной группе ресурсов, проверьте, можно ли объединить ресурсы в одну и ту же. В этом случае используйте одну операцию перемещения между группами ресурсов, чтобы объединить все ресурсы в одну группу ресурсов.
Перейдите к сценарию для перемещения по подпискам , чтобы узнать больше.
Scenario for move across subscriptions (Сценарий перемещения между подписками)
Перемещение ресурсов из одной подписки в другую — это трехэтапный процесс. Показан только один зависимый ресурс, чтобы проиллюстрировать следующие действия:
- Шаг 1. Если зависимые ресурсы распределены по разным группам ресурсов, сначала переместите их в одну группу ресурсов.
- Шаг 2. Совместно переместите ресурс и зависимые ресурсы из исходной подписки в целевую.
- Step 3: При необходимости перераспределите зависимые ресурсы по разным группам ресурсов в целевой подписке.
Перемещение ресурсов
Использование портала Azure
Чтобы переместить ресурсы, выберите группу ресурсов, которая содержит эти ресурсы.
Выберите ресурсы, которые требуется переместить. Чтобы переместить все ресурсы, установите флажок в верхней части списка. Или выберите ресурсы по отдельности.
Нажмите кнопку Переместить.
Эта кнопка предоставляет выбор из трех вариантов:
- Перемещение в новую группу ресурсов.
- Перемещение в новую подписку.
- Перемещение в новый регион. Сведения об изменении регионов см. в разделе "Перемещение ресурсов" между регионами (из группы ресурсов) с помощью Azure Resource Mover.
Выберите, перемещаете ресурсы в новую группу ресурсов или подписку.
Исходная группа ресурсов автоматически задает. Выберите целевую группу ресурсов. Если вы переходите в новую подписку, укажите это также. Выберите Далее.
- Портал проверит возможность перемещения ресурсов. Дождитесь завершения проверки.
После успешного завершения проверки нажмите кнопку Далее.
Подтвердите обновление инструментов и сценариев для этих ресурсов. Чтобы начать перемещение ресурсов, выберите Переместить.
- Портал Azure уведомляет вас о завершении перемещения.
Использование командной строки Azure CLI
Проверить
Чтобы протестировать сценарий перемещения без фактического перемещения ресурсов в режиме az resource invoke-action
реального времени, используйте команду. Используйте эту команду только в том случае, если необходимо моделировать результаты, не выполнив указанные ниже действия. Для выполнения этой операции вам потребуется идентификатор ресурса исходной группы ресурсов, целевой группы ресурсов и каждого перемещаемого ресурса.
Используется \"
для экранирования двойных кавычки в тексте запроса.
az resource invoke-action --action validateMoveResources \
--ids "/subscriptions/{subscription-id}/resourceGroups/{source-rg}" \
--request-body "{ \"resources\": [\"/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}\", \"/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}\", \"/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}\"],\"targetResourceGroup\":\"/subscriptions/{subscription-id}/resourceGroups/{destination-rg}\" }"
Если проверка пройдет успешно, вы увидите следующее:
{} Finished ..
Если проверка завершается ошибкой, появится сообщение об ошибке, объясняющее, почему ресурсы не будут перемещаться.
Передвинуть
Чтобы переместить существующие ресурсы в другую группу ресурсов или подписку, выполните команду az resource move
. В параметре --ids
укажите перемещаемый список идентификаторов ресурсов с разделителями-пробелами.
В следующих командах показано, как переместить несколько ресурсов в новую группу ресурсов. Они работают с Azure CLI в терминале Bash или в консоли Azure PowerShell.
--destination-subscription-id
Укажите параметр для перемещения ресурсов в новую подписку.
webapp=$(az resource show -g OldRG -n ExampleSite --resource-type "Microsoft.Web/sites" --query id --output tsv)
plan=$(az resource show -g OldRG -n ExamplePlan --resource-type "Microsoft.Web/serverfarms" --query id --output tsv)
az resource move --destination-group newgroup --ids $webapp $plan
Использование Azure PowerShell
Проверить
Чтобы протестировать сценарий перемещения без фактического перемещения ресурсов в режиме реального времени, используйте Invoke-AzResourceAction
команду в Azure PowerShell. Используйте эту команду только в том случае, если необходимо моделировать результаты, не выполнив указанные ниже действия.
$sourceName = "sourceRG"
$destinationName = "destinationRG"
$resourcesToMove = @("app1", "app2")
$sourceResourceGroup = Get-AzResourceGroup -Name $sourceName
$destinationResourceGroup = Get-AzResourceGroup -Name $destinationName
$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }
Invoke-AzResourceAction -Action validateMoveResources `
-ResourceId $sourceResourceGroup.ResourceId `
-Parameters @{
resources = $resources.ResourceId; # Wrap in an @() array if providing a single resource ID string.
targetResourceGroup = $destinationResourceGroup.ResourceId
}
Выходные данные не будут отображаться, если проверка выполнена успешно. Однако сообщение об ошибке, объясняющее, почему ресурсы не будут перемещаться, будут отображаться, если проверка завершается ошибкой.
Передвинуть
Чтобы переместить существующие ресурсы в другую группу ресурсов или подписку, используйте команду Move-AzResource. В следующем примере показано, как переместить несколько ресурсов в новую группу ресурсов.
$sourceName = "sourceRG"
$destinationName = "destinationRG"
$resourcesToMove = @("app1", "app2")
$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }
Move-AzResource -DestinationResourceGroupName $destinationName -ResourceId $resources.ResourceId
Чтобы переместить ресурс в новую подписку, добавьте значение параметра DestinationSubscriptionId
.
Использование Python
Проверить
Чтобы протестировать сценарий перемещения без фактического перемещения ресурсов в режиме реального ResourceManagementClient.resources.begin_validate_move_resources
времени, используйте этот метод. Используйте этот метод только в том случае, если необходимо моделировать результаты без выполнения.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
source_name = "sourceRG"
destination_name = "destinationRG"
resources_to_move = ["app1", "app2"]
destination_resource_group = resource_client.resource_groups.get(destination_name)
resources = [
resource for resource in resource_client.resources.list_by_resource_group(source_name)
if resource.name in resources_to_move
]
resource_ids = [resource.id for resource in resources]
validate_move_resources_result = resource_client.resources.begin_validate_move_resources(
source_name,
{
"resources": resource_ids,
"target_resource_group": destination_resource_group.id
}
).result()
print("Validate move resources result: {}".format(validate_move_resources_result))
Выходные данные не будут отображаться, если проверка выполнена успешно. Однако сообщение об ошибке, объясняющее, почему ресурсы не будут перемещаться, будут отображаться, если проверка завершается ошибкой.
Передвинуть
Чтобы переместить существующие ресурсы в другую группу ресурсов или подписку, используйте ResourceManagementClient.resources.begin_move_resources
метод в Python. В следующем примере показано, как переместить несколько ресурсов в новую группу ресурсов.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
source_name = "sourceRG"
destination_name = "destinationRG"
resources_to_move = ["app1", "app2"]
destination_resource_group = resource_client.resource_groups.get(destination_name)
resources = [
resource for resource in resource_client.resources.list_by_resource_group(source_name)
if resource.name in resources_to_move
]
resource_ids = [resource.id for resource in resources]
resource_client.resources.begin_move_resources(
source_name,
{
"resources": resource_ids,
"target_resource_group": destination_resource_group.id
}
)
Использование REST API
Проверить
Позволяет validate move operation
протестировать сценарий перемещения без фактического перемещения ресурсов. Используйте эту операцию для проверки успешности перемещения. Проверка вызывается автоматически при отправке запроса на перемещение. Используйте эту операцию только в том случае, если необходимо моделировать результаты без выполнения. Для запуска этой операции вам необходимо:
- Имя исходной группы ресурсов
- Идентификатор ресурса целевой группы ресурсов
- Идентификатор каждого перемещаемого ресурса
- Маркер доступа для вашей учетной записи
Отправьте следующий запрос:
POST https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<source-group>/validateMoveResources?api-version=2019-05-10
Authorization: Bearer <access-token>
Content-type: application/json
С текстом запроса:
{
"resources": ["<resource-id-1>", "<resource-id-2>"],
"targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}
Если запрос имеет правильный формат, операция возвращает следующее:
Response Code: 202
cache-control: no-cache
pragma: no-cache
expires: -1
location: https://management.azure.com/subscriptions/<subscription-id>/operationresults/<operation-id>?api-version=2018-02-01
retry-after: 15
...
Код состояния 202 указывает, что запрос проверки был принят, но он еще не определил, будет ли операция перемещения успешно выполнена. Значение location
содержит URL-адрес, который используется для проверки состояния продолжительной операции.
Чтобы проверить состояние, отправьте следующий запрос:
GET <location-url>
Authorization: Bearer <access-token>
При выполнении операции вы продолжите получать код состояния 202 года. Подождите в течение времени, указанного в значении retry-after
, прежде чем повторять попытку. Вы получите код состояния 204 , если выполняется проверка перемещения. Если проверка перемещения завершается ошибкой, вы получите сообщение об ошибке, похожее на следующее:
{"error":{"code":"ResourceMoveProviderValidationFailed","message":"<message>"...}}
Передвинуть
Чтобы переместить существующие ресурсы в другую группу ресурсов или подписку, используйте Move resources
операцию.
POST https://management.azure.com/subscriptions/{source-subscription-id}/resourcegroups/{source-resource-group-name}/moveResources?api-version={api-version}
Укажите целевую группу ресурсов и ресурсы для перемещения в тексте запроса.
{
"resources": ["<resource-id-1>", "<resource-id-2>"],
"targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}
Часто задаваемые вопросы
Моя операция перемещения ресурсов, которая обычно занимает несколько минут, выполняется почти час. Это какая-то ошибка?
Перемещение ресурса — это сложная операция с разными этапами. Она может затрагивать не только поставщика ресурсов того ресурса, который вы пытаетесь переместить. Azure Resource Manager позволяет выполнять операцию перемещения четыре часа из-за зависимостей между поставщиками ресурсов. Эта длительность дает им время для восстановления после временных проблем. Если запрос на перемещение находится в течение четырехчасового периода, операция продолжает пытаться завершиться и может завершиться успешно. В течение этого времени исходная и целевая группы ресурсов блокируются во избежание возникновения проблем с согласованностью.
Почему группа ресурсов блокируется на четыре часа во время перемещения ресурса?
Операции перемещения разрешены четыре часа. Группы ресурсов источника и назначения заблокированы в течение этого времени, чтобы предотвратить их изменение.
Выполнение запроса на перемещение состоит из двух этапов. Ресурсы перемещаются на первом этапе, а поставщики ресурсов, зависящие от перемещаемых ресурсов, уведомляются во время второго этапа. Группа ресурсов может быть заблокирована в течение всех четырех часов, когда поставщик ресурсов завершается сбоем любого этапа. Resource Manager инициирует любые неудачные шаги во время операции перемещения.
Resource Manager разблокирует обе группы ресурсов, если ресурс не будет перемещаться в течение четырех часов. Ресурсы, которые успешно перемещены, находятся в целевой группе ресурсов. Ресурсы, которые не удалось переместить, остаются в исходной группе ресурсов.
Каковы последствия блокировки исходных и целевых групп ресурсов при перемещении ресурса?
Блокировка предотвращает удаление любой группы ресурсов. Во-вторых, блокировка предотвращает создание нового ресурса, удаление ресурса или обновление свойств ресурса в каждой группе ресурсов (например, изменение размера виртуальной машины).
На следующем рисунке показано сообщение об ошибке из портал Azure при попытке пользователя удалить группу ресурсов, которая является частью текущего перемещения:
На приведенном ниже рисунке ресурс виртуальной машины принадлежит группе ресурсов (TestB), которая в настоящее время проходит операцию перемещения. Когда пользователь пытается обновить свойство виртуальной машины (например, его размер), портал Azure возвращает сообщение об ошибке. Это происходит из-за блокировки группы ресурсов во время перемещения, которая защищает ресурсы от изменения.
Кроме того, ни исходная, ни целевая группа ресурсов не могут участвовать в других операциях перемещения одновременно во время перемещения ресурсов. Например, если ресурсы перемещаются из группы ресурсов A в группу ресурсов B, ни группа А, ни группа B не могут быть вовлечены в другую операцию перемещения одновременно (например, перемещение ресурсов в группу ресурсов или из группы ресурсов C). Это ограничение предотвращает блокировку групп ресурсов нескольких конфликтующих операций во время процесса перемещения.
Что означает код ошибки "MissingMoveDependentResources"?
При перемещении ресурса его зависимые ресурсы должны существовать в целевой группе ресурсов или подписке или включаться в запрос перемещения. Вы получаете код ошибки MissingMoveDependentResources , если зависимый ресурс не соответствует этому требованию. Сообщение об ошибке содержит сведения о зависимых ресурсах, которые необходимо включить в запрос перемещения.
Например, перемещение виртуальной машины может потребовать перемещения семи типов ресурсов с тремя разными поставщиками ресурсов. К этими поставщикам ресурсов относятся:
Microsoft.Compute;
- virtualMachines
- disks
Microsoft.Network.
- networkInterfaces
- publicIPAddresses
- networkSecurityGroups
- virtualNetworks
Microsoft.Storage;
- storageAccounts
Другой распространенный пример включает перемещение виртуальной сети, в которой может потребоваться переместить несколько других ресурсов, связанных с этой виртуальной сетью. Запрос на перемещение может потребовать перемещения общедоступных IP-адресов, таблиц маршрутов, шлюзов виртуальной сети, групп безопасности сети и других ресурсов. Шлюз виртуальной сети должен находиться в той же группе ресурсов, что и ее виртуальная сеть, так как они не могут перемещаться отдельно.
Что означает код ошибки "RequestDisallowedByPolicy"?
Resource Manager проверяет запрос на перемещение перед попыткой перемещения. Эта проверка включает политики проверки, определенные для ресурсов, участвующих в перемещении. Например, если вы пытаетесь переместить хранилище ключей, но у вашей организации есть политика запрета создания хранилища ключей в целевой группе ресурсов, проверка завершается ошибкой и перемещение блокируется. Возвращаемый код ошибки — RequestDisallowedByPolicy.
Дополнительные сведения о политиках см. в статье Что такое служба "Политика Azure"?
Почему не удается переместить некоторые ресурсы в Azure?
В настоящее время не все ресурсы Azure разрешают операции перемещения.
Сколько ресурсов можно переместить в одной операции?
По возможности разделите большие перемещения в разные операции перемещения. При попытке перемещения более чем 800 ресурсов за одну операцию Resource Manager немедленно возвращает ошибку. Однако перемещение менее 800 ресурсов также может завершиться сбоем по времени ожидания.
Что такое ошибка, которая не находится в состоянии "успешно"?
При получении сообщения об ошибке, указывающего, что ресурс не будет перемещаться, так как он не находится в состоянии "Успешно" , это может быть связано с тем, что зависимый ресурс блокирует перемещение. Как правило, код ошибки в таком случае — MoveCannotProceedWithResourcesNotInSucceededState.
Если исходная или целевая группа ресурсов содержит виртуальную сеть, состояния всех ресурсов, зависящих от этой виртуальной сети, проверяются во время перемещения; сюда входят ресурсы, которые напрямую и косвенно зависят от сети. Перемещение блокируется, если не удалось выполнить какие-либо ресурсы. Например, если виртуальная машина с использованием виртуальной сети завершилась ошибкой, перемещение блокируется. Он также блокируется, даже если виртуальная машина не является одной из перемещаемых ресурсов и не входит в одну из групп ресурсов во время перемещения.
Два решения для этого препятствия переносят ресурсы в группу ресурсов, которая не имеет виртуальной сети или обращается в службу поддержки.
Можно ли переместить группу ресурсов в другую подписку?
Нет, вы не можете переместить группу ресурсов в новую подписку. Но вы можете переместить все ресурсы в группу ресурсов в другую подписку. Такие параметры, как теги, назначения ролей и политики, не передаются автоматически из исходной группы ресурсов в целевую группу ресурсов. Эти параметры необходимо применить вручную к новой группе ресурсов.
Следующие шаги
Продолжайте ссылаться на поддержку операций перемещения ресурсов , чтобы проверить, какие ресурсы Azure поддерживают операции перемещения.