Compartilhar via


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.

  1. 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.

  2. 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:

  3. 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.

  4. 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.

  5. 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:

  1. 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
    
  2. 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.

  3. 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
  4. 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.

  5. 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:

Diagrama que mostra o processo de três etapas de movimentação de recursos entre assinaturas.

  • 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

  1. Para mover recursos, selecione o grupo de recursos que contém esses recursos.

  2. 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.

    Captura de tela do portal do Azure mostrando a seleção de recursos a serem movidos.

  3. Selecione o botão Mover.

    Captura de tela do portal do Azure exibindo o botão Mover com três opções.

    Esse botão oferece três opções:

    • Mover para um novo grupo de recursos.
    • Mover para uma nova assinatura.
  1. Selecione se você está movendo os recursos para um novo grupo de recursos ou assinatura.

  2. 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.

    Captura de tela do portal do Azure em que o usuário especifica o grupo de recursos de destino para a operação de movimentação.

  3. O portal valida que os recursos podem ser movidos. Aguarde a conclusão da validação.

Captura de tela do portal do Azure mostrando o processo de validação para a operação de movimentação.

  1. Quando a validação for concluída com êxito, selecione Avançar.

  2. Confirme que você precisa atualizar ferramentas e scripts para esses recursos. Para começar a mover os recursos, selecione Mover.

Captura de tela do portal do Azure em que o usuário reconhece a necessidade de atualizar ferramentas e scripts antes de iniciar a operação de movimentação.

  1. O portal do Azure notifica você quando a movimentação é concluída.

Captura de tela do portal do Azure exibindo uma notificação com os resultados da operação de movimentação.

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:

Captura de tela do portal do Azure mostrando uma mensagem de erro ao tentar excluir um grupo de recursos envolvido em uma operação de 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. Esse erro ocorre porque o grupo de recursos é bloqueado durante a movimentação, o que protege contra a modificação de recursos.

Captura de tela do portal do Azure mostrando uma mensagem de erro quando um usuário tenta atualizar uma propriedade (tamanho da máquina virtual) da máquina virtual.

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.