Mover recursos do Azure para um novo grupo de recursos ou subscrição
Este artigo explica como mover recursos do Azure entre grupos de recursos dentro da mesma assinatura ou entre assinaturas diferentes. Se a mudança envolver assinaturas diferentes, ambas as assinaturas deverão fazer parte do mesmo locatário do Microsoft Entra ID. Você pode usar ferramentas como o portal do Azure, Azure PowerShell, CLI do Azure, a API REST ou Python para mover os recursos.
Durante a operação de movimentação, os grupos de recursos de origem e de destino são bloqueados. Não é possível criar, excluir ou atualizar recursos dentro desses grupos de recursos enquanto a mudança estiver em andamento. No entanto, os recursos existentes permanecem plenamente operacionais. Por exemplo, se você mover uma máquina virtual de um grupo de recursos para outro, não poderá excluí-la ou modificar suas propriedades (como seu tamanho) durante a mudança. Apesar dessa restrição, a máquina virtual continua a operar normalmente e os serviços que dependem dela não sofrem nenhum tempo de inatividade. O bloqueio pode durar até quatro horas. A maioria dos movimentos são concluídos mais rapidamente, e o bloqueio é removido de acordo.
Somente recursos de nível superior (pai) devem ser especificados na solicitação de movimentação. Os recursos filho são movidos automaticamente com os pais, mas não podem ser movidos de forma independente. Por exemplo, você pode mover um recurso pai como Microsoft.Compute/virtualMachines
, e seu recurso filho como Microsoft.Compute/virtualMachines/extensions
move com ele. No entanto, você não pode mover o recurso filho por conta própria.
Enquanto a movimentação de um recurso preserva suas dependências com recursos filho, as dependências com outros recursos podem ser interrompidas e talvez precisem ser configuradas novamente. Mover um recurso apenas altera seu grupo de recursos associado e não altera a região física do recurso.
Nota
Os recursos do Azure não podem ser movidos se existir um bloqueio somente leitura na origem, no grupo de recursos de destino ou na assinatura.
ID de recurso alterado
Quando move um recurso, altera o seu ID de recurso. O formato padrão para uma ID de recurso é /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
. Quando move um recurso para um novo grupo de recursos ou subscrição, altera um ou mais valores nesse caminho.
Se você usar o ID do recurso em qualquer lugar, altere esse valor. Por exemplo, se você tiver um painel personalizado no portal que faça referência a uma ID de recurso, atualize esse valor. Procure quaisquer scripts ou modelos que tenham de ser atualizados para o novo ID de recurso.
Lista de verificação antes de mover recursos
Algumas etapas importantes precedem a movimentação de um recurso. Você pode evitar erros se verificar essas condições.
As subscrições de origem e de destino têm de estar ativas. Se você tiver problemas para habilitar uma conta desabilitada, crie uma solicitação de suporte do Azure. Selecione Gestão de Subscrições como o tipo de problema.
As subscrições de origem e de destino têm de existir no mesmo inquilino do Microsoft Entra. Use a CLI do Azure ou o PowerShell para verificar se ambas as assinaturas têm a mesma ID de locatário.
az account show --subscription <your-source-subscription> --query tenantId az account show --subscription <your-destination-subscription> --query tenantId
Se as IDs de locatário das assinaturas de origem e de destino não corresponderem, use os seguintes métodos para reconciliá-las:
Para mover recursos de ou para um parceiro CSP (Provedor de Soluções na Nuvem), consulte Transferir assinaturas do Azure entre assinantes e CSPs.
Os recursos que quer mover devem suportar a operação de movimentação. Para obter uma lista de quais recursos dão suporte a operações de movimentação, consulte Tipos de recursos do Azure para operações de movimentação.
Alguns serviços têm limitações ou requisitos específicos durante a movimentação de recursos. Verifique as seguintes orientações de movimentação antes de mover recursos dentro desses serviços:
- Se estiver a utilizar o Azure Stack Hub, não pode mover recursos entre grupos.
- Serviços de Aplicações do Azure
- Serviços de DevOps do Azure
- Modelo de implementação clássico para computação clássica, armazenamento, redes virtuais e serviços na nuvem
- Serviços na nuvem (suporte alargado)
- Rede
- Serviços de Recuperação do Azure
- Máquinas virtuais
- Para mover uma subscrição do Azure para um novo grupo de gestão, veja Mover subscrições.
A assinatura de destino deve ser registrada para o provedor de recursos do recurso que você está movendo. Se não estiver, você receberá um erro informando que a assinatura não está registrada para um tipo de recurso. Poderá ver este erro ao mover um recurso para uma nova subscrição, mas não utilizou anteriormente o tipo de recurso na subscrição.
Para obter o status do registro:
az account set -s <destination-subscription-name-or-id> az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table
Para registar um fornecedor de recursos:
az provider register --namespace Microsoft.Batch
Antes de iniciar uma operação de movimentação, verifique a cota de assinatura da assinatura para a qual você está movendo recursos. Verifique se você pode solicitar um aumento em uma cota que faria com que uma assinatura de destino excedesse seu limite. Para obter orientações detalhadas sobre limites e como solicitar um aumento, consulte Limites de assinatura e serviço, cotas e restrições do Azure.
A conta que move os recursos deve ter, pelo menos, as seguintes permissões:
- No grupo de recursos de origem: Microsoft.Resources/subscriptions/resourceGroups/moveResources/action
- No grupo de recursos de destino: Microsoft.Resources/subscriptions/resourceGroups/write
Se você mover um recurso com uma atribuição de função ativa do Azure (ou seu recurso filho com essa mesma atribuição), a atribuição de função não será movida e ficará órfã. Você deve criar a atribuição de função novamente após a mudança. Embora o sistema remova automaticamente a atribuição de função órfã, recomendamos que você a remova antes da mudança.
Para saber mais sobre como gerenciar atribuições de função, consulte Listar atribuições de função do Azure e Atribuir funções do Azure.
Para uma movimentação entre subscrições, o recurso e os respetivos recursos dependentes devem estar localizados no mesmo grupo de recursos e ser movidos em conjunto. Por exemplo, uma máquina virtual com discos gerenciados requer que você mova a máquina virtual, os discos gerenciados e outros recursos dependentes juntos.
Se você estiver movendo um recurso para uma nova assinatura, verifique se o recurso tem recursos dependentes e se eles estão localizados no mesmo grupo de recursos. Se os recursos não estiverem no mesmo grupo de recursos, verifique se é possível combiná-los no mesmo grupo de recursos. Se puder, use uma operação de movimentação entre grupos de recursos para consolidar todos os recursos no mesmo grupo de recursos.
Para obter mais informações, consulte Cenário para movimentação entre assinaturas.
Cenário para mover entre subscrições
Mover recursos de uma assinatura para outra é um processo de três etapas. Para ilustrar essas etapas, o diagrama a seguir mostra apenas um recurso dependente:
- Passo 1: Se os recursos dependentes estiverem distribuídos entre diferentes grupos de recursos, primeiro, mova-os para um grupo de recursos.
- Passo 2: Mova o recurso e os recursos dependentes da subscrição de origem para a subscrição de destino.
- Passo 3: Opcionalmente, redistribua os recursos dependentes para grupos de recursos diferentes na subscrição de destino.
Mover recursos
Utilizar o portal do Azure
Para mover recursos, selecione o grupo de recursos que contém esses recursos.
Selecione os recursos que quer mover. Para mover todos os recursos, marque a caixa de seleção na parte superior da lista. Em alternativa, selecione os recursos individualmente.
Selecione o botão Mover.
Este botão dá-lhe três opções:
- Mover para um novo grupo de recursos.
- Mover para uma nova subscrição.
- Mover para uma nova região. Para alterar regiões, consulte Mover recursos entre regiões (do grupo de recursos) com o Azure Resource Mover.
Selecione se você está movendo os recursos para um novo grupo de recursos ou assinatura.
O grupo de recursos de origem é definido automaticamente. Especifique o grupo de recursos de destino. Se você estiver mudando para uma nova assinatura, especifique essa opção. Selecione Seguinte.
O portal valida que os recursos podem ser movidos. Aguarde que a validação seja concluída.
Quando a validação terminar com sucesso, selecione Seguinte.
Confirme que precisa de atualizar as ferramentas e os scripts para estes recursos. Para começar a mover os recursos, selecione Mover.
- O portal do Azure notifica quando a mudança é concluída.
Utilizar a CLI do Azure
Validar
Para testar seu cenário de movimentação sem realmente mover recursos em tempo real, use o az resource invoke-action
comando. Use este comando somente quando precisar modelar os resultados sem seguir adiante. Para executar essa operação, você precisa da ID do recurso do grupo de recursos de origem, do grupo de recursos de destino e de cada recurso que está movendo.
Use \"
para evitar aspas duplas no corpo da solicitação.
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}\" }"
Se a validação for aprovada, verá:
{} Finished ..
Se a validação falhar, você verá uma mensagem de erro explicando por que não é possível mover os recursos.
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use o az resource move
comando.
--ids
No parâmetro, forneça uma lista separada por espaço das IDs de recursos a serem movidas.
Os comandos a seguir mostram como mover vários recursos para um novo grupo de recursos. Eles trabalham com a CLI do Azure em um terminal Bash ou em um console do Azure PowerShell. Para mover recursos para uma nova assinatura, forneça o --destination-subscription-id
parâmetro.
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
Utilizar o Azure PowerShell
Validar
Para testar seu cenário de movimentação sem realmente mover recursos em tempo real, use o Invoke-AzResourceAction
comando no Azure PowerShell. Use este comando somente quando precisar modelar os resultados sem seguir adiante.
$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
}
Uma saída não será exibida se a validação for bem-sucedida. No entanto, se a validação falhar, uma mensagem de erro explica por que você não pode mover os recursos.
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use o comando Move-AzResource . O exemplo seguinte mostra como mover vários recursos para um novo grupo de recursos.
$sourceName = "sourceRG"
$destinationName = "destinationRG"
$resourcesToMove = @("app1", "app2")
$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }
Move-AzResource -DestinationResourceGroupName $destinationName -ResourceId $resources.ResourceId
Para mover para uma nova assinatura, inclua um valor para o DestinationSubscriptionId
parâmetro.
Utilizar o Python
Validar
Para testar seu cenário de movimentação sem realmente mover recursos em tempo real, use o ResourceManagementClient.resources.begin_validate_move_resources
método. Use esse método somente quando precisar modelar os resultados sem seguir adiante.
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))
Uma saída não será exibida se a validação for bem-sucedida. No entanto, se a validação falhar, uma mensagem de erro explica por que você não pode mover os recursos.
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use o ResourceManagementClient.resources.begin_move_resources
método em Python. O exemplo seguinte mostra como mover vários recursos para um novo grupo de recursos.
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
}
)
Utilizar a API REST
Validar
A validate move operation
operação testa seu cenário de movimentação sem realmente mover recursos. Use esta operação para verificar se a mudança pode ser bem-sucedida. A validação é chamada automaticamente quando você envia uma solicitação de movimentação. Use esta operação somente quando precisar modelar os resultados sem seguir adiante. Para executar esta operação, você precisa:
- Nome do grupo de recursos de origem
- ID do recurso do grupo de recursos de destino
- ID do recurso de cada recurso a ser movido
- O token de acesso para a sua conta
Envie o seguinte pedido:
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
Com um corpo de solicitação:
{
"resources": ["<resource-id-1>", "<resource-id-2>"],
"targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}
Se a solicitação estiver formatada corretamente, a operação retornará:
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
...
Um código de status 202 indica que a solicitação de validação foi aceita, mas ainda não determinou se a operação de movimentação será bem-sucedida. O location
valor contém uma URL que você usa para verificar o status da operação de longa execução.
Para verificar o status, envie a seguinte solicitação:
GET <location-url>
Authorization: Bearer <access-token>
Você continua a receber um código de status 202 enquanto a operação é executada. Aguarde o retry-after
número de segundos indicado no valor antes de tentar novamente. Você receberá um código de status 204 se a validação da movimentação for bem-sucedida. Se a validação de movimentação falhar, você receberá uma mensagem de erro semelhante a:
{"error":{"code":"ResourceMoveProviderValidationFailed","message":"<message>"...}}
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use a Move resources
operação.
POST https://management.azure.com/subscriptions/{source-subscription-id}/resourcegroups/{source-resource-group-name}/moveResources?api-version={api-version}
Especifique o grupo de recursos de destino e os recursos a serem movidos no corpo da solicitação.
{
"resources": ["<resource-id-1>", "<resource-id-2>"],
"targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}
Perguntas mais frequentes
Minha operação de movimentação de recursos, que geralmente leva alguns minutos, está sendo executada por quase uma hora. Passa-se alguma coisa?
Mover um recurso é uma operação complexa com diferentes fases. Pode envolver mais do que apenas o fornecedor do recurso que está a tentar mover. O Azure Resource Manager permite que uma operação de movimentação seja concluída por quatro horas devido às dependências entre provedores de recursos. Esta duração dá-lhes tempo para recuperar de problemas transitórios. Se a sua solicitação de mudança estiver dentro do período de quatro horas, a operação continuará tentando ser concluída e poderá ser bem-sucedida. A operação bloqueia os grupos de recursos de origem e destino durante esse período para evitar problemas de consistência.
Por que é que o meu grupo de recursos está bloqueado durante quatro horas durante a movimentação dos recursos?
As operações de movimentação têm permissão de quatro horas para serem concluídas. A operação bloqueia os grupos de recursos de origem e destino durante esse tempo para evitar que eles sejam modificados.
Os pedidos de movimentação têm duas fases. Os recursos são movidos durante a primeira fase, e os provedores de recursos que dependem dos recursos que estão sendo movidos são notificados durante a segunda fase. Um grupo de recursos pode ser bloqueado por todas as quatro horas quando um provedor de recursos falha em qualquer fase. O Gerenciador de Recursos inicia todas as etapas com falha durante a extensão da operação de movimentação.
O Gestor de Recursos desbloqueia ambos os grupos de recursos se um recurso não se mover no prazo de quatro horas. Os recursos que são movidos com êxito estão no grupo de recursos de destino. Os recursos que não são movidos permanecem no grupo de recursos de origem.
Quais são as implicações dos grupos de recursos de origem e destino que são bloqueados durante a movimento de recursos?
O bloqueio impede que você exclua qualquer grupo de recursos. O bloqueio também impede que você crie um novo recurso, exclua um recurso ou atualize as propriedades de um recurso dentro de cada grupo de recursos (por exemplo, alterar o tamanho de uma máquina virtual).
A imagem a seguir mostra uma mensagem de erro do portal do Azure quando você tenta excluir um grupo de recursos que faz parte de uma movimentação em andamento:
Na imagem anterior, o recurso de máquina virtual pertence a um grupo de recursos ("TestB") que está atualmente passando por uma operação de movimentação. Quando você tenta atualizar a propriedade de uma máquina virtual (como seu tamanho), o portal do Azure retorna uma mensagem de erro. Este erro ocorre porque o grupo de recursos está bloqueado durante a mudança, o que protege os seus recursos de serem modificados.
Além disso, os grupos de recursos de origem e de destino não podem participar de outras operações de movimentação simultaneamente durante uma movimentação de recursos. Por exemplo, se você estiver movendo recursos do grupo de recursos A para o grupo de recursos B, tanto o grupo de recursos A quanto o grupo de recursos B não poderão estar envolvidos em outra operação de movimentação ao mesmo tempo. Não é possível mover recursos simultaneamente de ou para o grupo de recursos C. Essa restrição impede que várias operações conflitantes bloqueiem grupos de recursos durante o processo de movimentação.
O que significa o código de erro "MissingMoveDependentResources"?
Quando você move um recurso, seus recursos dependentes devem existir no grupo de recursos ou assinatura de destino ou ser incluídos na solicitação de movimentação. Você obtém o código de erro MissingMoveDependentResources quando um recurso dependente não atende a esse requisito. A mensagem de erro fornece detalhes sobre o recurso dependente que você precisa incluir na solicitação de movimentação.
Por exemplo, mover uma máquina virtual pode exigir a movimentação de sete tipos de recursos com três fornecedores de recursos diferentes. Esses fornecedores de recursos e tipos são:
Microsoft.Compute
- virtualMachines
- disks
Microsoft.Network
- networkInterfaces
- publicIPAddresses
- networkSecurityGroups
- virtualNetworks
Microsoft.Storage
- storageAccounts
Outro exemplo comum envolve mover uma rede virtual onde você pode ter que mover vários outros recursos associados a essa rede virtual. A solicitação de movimentação pode exigir a movimentação de endereços IP públicos, tabelas de rotas, gateways de rede virtual, grupos de segurança de rede e outros recursos. Um gateway de rede virtual deve estar no mesmo grupo de recursos que sua rede virtual, pois eles não podem se mover separadamente.
O que significa o código de erro "RequestDisallowedByPolicy"?
O Resource Manager valida sua solicitação de movimentação antes de tentar uma mudança. Essa validação inclui a verificação de políticas definidas para os recursos envolvidos na mudança. Por exemplo, a validação falha quando você está tentando mover um cofre de chaves, mas sua organização tem uma política para negar a criação de um cofre de chaves no grupo de recursos de destino. O código de erro devolvido é RequestDisallowedByPolicy.
Para obter mais informações sobre políticas, consulte O que é a Política do Azure?.
Por que não posso mover alguns recursos do Azure?
Nem todos os recursos do Azure permitem operações de movimentação.
Quantos recursos posso mover em uma operação?
Separe grandes movimentos em diferentes operações de movimentação quando possível. O Resource Manager devolve imediatamente um erro quando há mais de 800 recursos numa única operação. No entanto, mover menos de 800 recursos também pode falhar com o tempo limite.
Qual é o significado do erro de que um recurso não está em um estado "bem-sucedido"?
Quando você recebe uma mensagem de erro indicando que não é possível mover um recurso porque ele não está em um estado bem-sucedido , pode ser porque um recurso dependente está bloqueando a mudança. Normalmente, o código de erro é MoveCannotProceedWithResourcesNotInSucceededState.
Se o grupo de recursos de origem ou de destino contiver uma rede virtual, os estados de todos os recursos que dependem dessa rede virtual serão verificados durante a movimentação. Esta verificação inclui recursos que dependem direta e indiretamente da rede. A movimentação será bloqueada se algum recurso não estiver em um estado bem-sucedido. Por exemplo, se uma máquina virtual usando uma rede virtual que não relata um estado bem-sucedido, a movimentação será bloqueada. A movimentação é bloqueada mesmo quando a máquina virtual não é um dos recursos que estão sendo movidos. A movimentação também é bloqueada mesmo quando a máquina virtual não está no grupo de recursos de origem ou destino.
Para resolver esse problema, mova seus recursos para um grupo de recursos que não tenha uma rede virtual ou entre em contato com o suporte.
Posso mover um grupo de recursos para uma subscrição diferente?
Não, não pode mover um grupo de recursos para uma nova subscrição. Mas, você pode mover todos os recursos em um grupo de recursos para um grupo de recursos em outra assinatura. Configurações como tags, atribuições de função e políticas não são transferidas automaticamente do grupo de recursos original para o grupo de recursos de destino. Você precisa aplicar essas configurações manualmente ao novo grupo de recursos.
Próximos passos
Para verificar quais recursos do Azure dão suporte a operações de movimentação, consulte Suporte a operações de movimentação para recursos.