Mover recursos do Azure para um novo grupo de recursos ou assinatura
Este artigo explica como mover recursos do Azure entre grupos de recursos na mesma assinatura ou em assinaturas diferentes. Se a mudança envolve assinaturas diferentes, ambas as assinaturas devem fazer parte do mesmo locatário do Microsoft Entra ID. Você pode usar ferramentas como portal do Azure, Azure PowerShell , CLI do Azure, API REST ou Python para mover os recursos.
Durante a operação de movimentação, os grupos de recursos de origem e de destino ficam bloqueados. Não é possível criar, excluir ou atualizar recursos dentro desses grupos enquanto a movimentação está em andamento. No entanto, os recursos existentes permanecem totalmente 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 tamanho) durante a movimentação. Apesar disso, a máquina virtual continua operando normalmente, e os serviços que dependem dela não passam por nenhum tempo de inatividade adicional. O bloqueio pode durar até quatro horas. A maioria dos movimentos é concluída mais rapidamente e o bloqueio é removido adequadamente.
Somente os recursos de nível superior (pai) devem ser especificados na solicitação de movimentação. Os recursos filho são movidos automaticamente com seus pais, mas não podem ser movidos independentemente. Por exemplo, você pode mover um recurso pai como Microsoft.Compute/virtualMachines
e seu recurso filho, como Microsoft.Compute/virtualMachines/extensions
, se move com ele. No entanto, você não pode mover o recurso filho por conta própria.
Ao mover 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 altera apenas seu grupo de recursos associado e não altera a região física do recurso.
Observação
Os recursos do Azure não poderão ser movidos se houver um bloqueio somente leitura na origem, no grupo de recursos de destino ou na assinatura.
ID do recurso alterada
Ao mover um recurso, você altera sua ID de recurso. O formato padrão para uma ID de recurso é /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
. Quando você move um recurso para um novo grupo de recursos ou assinatura, você altera um ou mais valores nesse caminho.
Se você usar a 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 os scripts ou modelos que precisam ser atualizados para a nova ID de recurso.
Lista de verificação antes de mover recursos
Algumas etapas importantes precedem a movimentação de um recurso. Você poderá evitar erros se verificar essas condições.
As assinaturas de origem e de destino devem estar ativas. Se você tiver problemas para habilitar uma conta desabilitada crie uma solicitação de Suporte do Azure. Selecione Subscription Management para o tipo de problema.
As assinaturas de origem e destino devem existir no mesmo locatário 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 destino não corresponderem, use os seguintes métodos para reconciliá-las:
Para transferir recursos para um parceiro CSP (Provedor de Soluções na Nuvem) ou de um parceiro CSP, confira Transferir assinaturas do Azure entre assinantes e CSPs.
Os recursos que você deseja mover devem oferecer suporte à operação de movimentação. Consulte tipos de recursos do Azure para operações de movimentação para obter uma lista de quais recursos dão suporte a operações de movimentação.
Alguns serviços têm limitações ou requisitos específicos ao mover recursos. Verifique as diretrizes de movimentação a seguir antes de mover recursos dentro desses serviços:
- Se você estiver usando Azure Stack Hub, não será possível mover recursos entre grupos.
- Serviços de Aplicativo do Azure
- Azure DevOps Services
- Modelo de implantação clássico para computação, armazenamento, redes virtuais e serviços de nuvem clássicos
- Serviços de Nuvem (suporte estendido)
- Rede
- Serviços de Recuperação do Azure
- Máquinas virtuais
- Para mover uma assinatura do Azure para um novo grupo de gerenciamento, consulte Mover assinaturas.
A assinatura de destino deve estar registrada para que o provedor de recursos do recurso que você está movendo. Se não estiver, você receberá um erro afirmando que a assinatura não está registrada para um tipo de recurso. Você pode ver esse erro ao mover um recurso para uma nova assinatura, mas sem ter usado o tipo de recurso na assinatura anteriormente.
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 registrar um provedor 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 diretrizes detalhadas sobre limites e como solicitar um aumento, consulte limites, cotas e restrições de serviço do Azure.
A conta de movimentação de 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 se moverá e ficará órfã. Você deve criar a atribuição de função novamente após a movimentação. Embora o sistema remova automaticamente a atribuição de função órfã, recomendamos removê-la antes da movimentação.
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 assinaturas, o recurso e seus recursos dependentes devem estar localizados no mesmo grupo de recursos e devem ser movidos juntos. Por exemplo, uma máquina virtual com discos gerenciados exige 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 você pode combiná-los no mesmo grupo de recursos. Se possível, 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, confira Cenário para mover entre assinaturas.
Cenário para mover entre assinaturas
Mover recursos de uma assinatura para outra é um processo de três etapas. Para ilustrar essas etapas, o diagrama a seguir ilustra apenas um recurso dependente:
- Etapa 1: Se os recursos dependentes forem distribuídos em grupos de recursos diferentes, primeiro mova-os para um grupo de recursos.
- Etapa 2: Mova o recurso e os recursos dependentes juntos da assinatura de origem para a assinatura de destino.
- Etapa 3: Opcionalmente, redistribua os recursos dependentes para grupos de recursos diferentes na assinatura de destino.
Mover recursos
Use o Portal do Azure
Para mover recursos, selecione o grupo de recursos que contém esses recursos.
Selecionar os recursos que deseja mover. Para mover todos os recursos, marque a caixa de seleção na parte superior da lista. Ou selecione recursos individualmente.
Selecione o botão Mover.
Esse botão oferece três opções:
- Mover para um novo grupo de recursos.
- Mover para uma nova assinatura.
- Mover para 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 define automaticamente. Especifique o grupo de recursos de destino. Se você estiver migrando para uma nova assinatura, especifique essa opção. Selecione Avançar.
O portal valida que os recursos podem ser movidos. Aguarde a conclusão da validação.
Quando a validação for concluída com êxito, selecione Avançar.
Confirme que você precisa atualizar ferramentas e scripts para esses recursos. Para começar a mover os recursos, selecione Mover.
- O portal do Azure notifica você quando a movimentação é concluída.
Use a CLI do Azure
Validar
Para testar seu cenário de movimentação sem realmente mover recursos em tempo real, use o comando az resource invoke-action
. 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 você está movendo.
Use \"
para escapar de 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, você verá:
{} Finished ..
Se a validação falhar, você verá uma mensagem de erro que explica por que não é possível mover os recursos.
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use o comando az resource move
. No parâmetro --ids
, forneça uma lista separada por espaços das IDs do recurso que deseja mover.
Os comandos a seguir mostram como mover vários recursos para um novo grupo de recursos. Eles funcionam 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 parâmetro --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
Usar PowerShell do Azure
Validar
Para testar seu cenário de movimentação sem realmente mover recursos em tempo real, use o comando Invoke-AzResourceAction
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 explicará por que você não pode mover os recursos.
Mover
Para mover os recursos existentes para outro grupo de recursos ou assinatura, use o comando Move-AzResource. O exemplo a seguir mostra como mover diversos 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 parâmetro DestinationSubscriptionId
.
Como usar o Python
Validar
Para testar seu cenário de movimentação sem realmente mover recursos em tempo real, use o método ResourceManagementClient.resources.begin_validate_move_resources
. 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 explicará por que você não pode mover os recursos.
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use o método ResourceManagementClient.resources.begin_move_resources
no Python. O exemplo a seguir mostra como mover diversos 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
}
)
Usar a API REST
Validar
A operação validate move operation
testa seu cenário de movimentação sem realmente mover recursos. Use esta operação para verificar se a movimentação 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 essa operação, você precisa de:
- Nome do grupo de recursos de origem
- ID do recurso do grupo de recursos de destino
- ID do recurso de cada recurso para mover
- O token de acesso para sua conta
Envie a seguinte solicitação:
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
...
O 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 valor location
contém um URL que você usa para verificar o status da operação de longa duração.
Para verificar o status, envie a seguinte solicitação:
GET <location-url>
Authorization: Bearer <access-token>
Você continua recebendo um código de status 202 enquanto a operação é executada. Aguarde o número de segundos indicado no valor retry-after
antes de tentar novamente. Você recebe um código de status 204 se a validação de movimentação é assegurada. 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 operação Move resources
.
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 frequentes
Minha operação de movimentação de recursos que geralmente leva alguns minutos está em execução há quase uma hora. Há algo de errado?
Mover um recurso é uma operação complexa com diferentes fases. Ela pode envolver mais do que apenas o provedor de recursos do recurso que você está tentando mover. O Azure Resource Manager permite que uma operação de movimentação de quatro horas seja concluída devido às dependências entre provedores de recursos. Essa duração lhes dá tempo para se recuperarem de problemas transitórios. Se a solicitação de movimentação estiver dentro do período de quatro horas, a operação continuará tentando ser concluída e poderá ter êxito. A operação bloqueia os grupos de recursos de origem e de destino durante esse tempo para evitar problemas de consistência.
Por que meu grupo de recursos está bloqueado por quatro horas durante a transferência de 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 de destino durante esse tempo para impedir que eles sejam modificados.
A solicitação de movimentação é composta por 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 durante todas as quatro horas quando um provedor de recursos falha em uma das fases. O Resource Manager inicia todas as etapas com falha durante o intervalo da operação de movimentação.
O Resource Manager desbloqueia ambos os grupos de recursos se um recurso não é movido dentro de quatro horas. Os recursos que se movem 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 de destino bloqueados durante a transferência de recursos?
O bloqueio impede que a exclusão de 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 em cada grupo de recursos (por exemplo, alterando 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 contínua:
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. Esse erro ocorre porque o grupo de recursos é bloqueado durante a movimentação, o que protege contra a modificação de recursos.
Além disso, a origem e o grupo de recursos de destino não podem participar de outras operações de movimentação simultaneamente durante uma movimentação de recurso. Por exemplo, se você estiver movendo recursos do grupo de recursos A para o grupo de recursos B, o grupo de recursos A e o grupo de recursos B não poderão estar envolvidos em outra operação de movimentação ao mesmo tempo. Você não pode mover recursos simultaneamente para ou do 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 de destino ou na assinatura ou ser incluídos na solicitação de movimentação. O código de erro MissingMoveDependentResources é exibido 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 provedores de recursos diferentes. Esses provedores e tipos de recursos são:
Microsoft.Compute
- virtualMachines
- disks
Microsoft.Network
- networkInterfaces
- publicIPAddresses
- networkSecurityGroups
- virtualNetworks
Microsoft.Storage
- storageAccounts
Outro exemplo comum envolve a movimentação de uma rede virtual em que talvez seja necessário 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 movimentação. Essa validação inclui a verificação de políticas definidas para os recursos envolvidos na movimentação. 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 retornado é RequestDisallowedByPolicy.
Para saber mais sobre políticas, veja O que é o Azure Policy?.
Por que não consigo transferir alguns recursos no 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 imediatamente retornará um erro quando houver mais de 800 recursos em uma única operação. No entanto, mover menos de 800 recursos também pode falhar por 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 pode mover um recurso porque ele não está em um estado de bem-sucedido, pode ser porque um recurso dependente está bloqueando a movimentação. Normalmente, o código de erro é MoveCannotProceedWithResourcesNotInSucceededState.
Se o grupo de recursos de origem ou destino contiver uma rede virtual, os estados de todos os recursos que dependem da rede virtual serão verificados durante a movimentação. Essa 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 usar 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 possui uma rede virtual, ou entre em contato com o suporte.
Posso mover um grupo de recursos para uma assinatura diferente?
Não, você não pode mover um grupo de recursos para uma nova assinatura. Porém, você pode mover todos os recursos em um grupo de recursos para um grupo de recursos em outra assinatura. Configurações como marcas, 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óximas etapas
Para verificar quais recursos do Azure dão suporte a operações de movimentação, consulte Suporte à operação de mudança de recursos.