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, quer estejam dentro da mesma subscrição ou entre subscrições 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 executar a movimentação usando ferramentas como o portal do Azure, Azure PowerShell, CLI do Azure, a API REST ou Python.
Durante a operação de movimentação, os grupos de recursos de origem e de destino são bloqueados. Isso significa que você não pode 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 (VM) de um grupo de recursos para outro, a VM não poderá ser excluída e suas propriedades (como o tamanho da VM) não poderão ser modificadas durante a mudança. Apesar disso, a VM continua a operar normalmente e os serviços que dependem dela não sofrerão nenhum tempo de inatividade adicional. O bloqueio pode durar até quatro horas, mas a maioria dos movimentos é concluída 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 junto com os pais, mas não podem ser movidos de forma independente. Por exemplo, um recurso pai como Microsoft.Compute/virtualMachines
pode ser movido e seu recurso filho, como Microsoft.Compute/virtualMachines/extensions
, será movido com ele. No entanto, o recurso filho não pode ser movido por conta própria.
Enquanto mover um recurso preserva suas dependências com recursos filho, as dependências com outros recursos podem quebrar e exigir reconfiguração. Mover um recurso apenas altera seu grupo de recursos associado, 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 no grupo de recursos ou na assinatura de origem ou destino.
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, precisará alterar esse valor. Por exemplo, se você tiver um painel personalizado no portal que faça referência a uma ID de recurso, precisará atualizar 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
Antes de mover um recurso, é necessário realizar alguns passos importantes. Ao confirmar estas condições, pode evitar erros.
As subscrições de origem e de destino têm de estar ativas. Se tiver problemas ao ativar uma conta que foi desativada, crie um pedido 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. Para verificar se ambas as subscrições têm o mesmo ID do inquilino, utilize o Azure PowerShell ou a CLI do Azure.
az account show --subscription <your-source-subscription> --query tenantId az account show --subscription <your-destination-subscription> --query tenantId
Se os IDs dos inquilinos das subscrições de origem e destino não forem os mesmos, utilize os seguintes métodos para reconciliar os IDs dos inquilinos:
Se pretender mover recursos de ou para um parceiro de Fornecedor de Soluções Cloud (CSP), veja Transferir subscrições do Azure entre subscritores e CSPs.
Os recursos que quer mover devem suportar a operação de movimentação. Para obter uma lista dos recursos que podem ser movidos, veja Suporte da operação de movimentação para recursos.
Alguns serviços têm limitações ou requisitos específicos durante a movimentação de recursos. Se mover algum dos seguintes serviços, veja a documentação de orientação antes de os mover.
- Se estiver a utilizar o Azure Stack Hub, não pode mover recursos entre grupos.
- Documentação de orientação para mover Serviços Aplicacionais
- Documentação de orientação para mover Serviços do Azure DevOps
- Documentação de orientação da movimentação do modelo de implementação clássica – Computação Clássica, Armazenamento Clássico, Redes Virtuais Clássicas e Serviços Cloud
- Orientação de movimentação de Serviços Cloud (suporte alargado)
- Documentação de orientação para mover Rede
- Documentação de orientação para mover Serviços de Recuperação
- Documentação de orientação para mover Máquinas Virtuais
- Para mover uma subscrição do Azure para um novo grupo de gestão, veja Mover subscrições.
A subscrição de destino tem de estar registada no fornecedor de recursos do recurso a ser movido. Caso contrário, recebe um erro a indicar que a subscrição não está registada num tipo de recurso. Poderá ver este erro ao mover um recurso para uma nova subscrição, mas em que esta nunca foi utilizada com esse tipo de recurso.
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 fazer a movimentação, verifique as quotas da subscrição para a qual está a mover os recursos. Se mover os recursos significa que a assinatura excede seus limites, você precisa analisar se pode solicitar um aumento na cota. Para obter uma lista de limites e como pedir um aumento, veja Subscrição do Azure e limites, quotas e restrições do serviço.
A conta que move os recursos deve ter, pelo menos, as seguintes permissões:
- Microsoft.Resources/subscriptions/resourceGroups/moveResources/action no grupo de recursos de origem.
- Microsoft.Resources/subscriptions/resourceGroups/write no grupo de recursos de destino.
Se mover um recurso que tenha uma função do Azure atribuída diretamente ao recurso (ou a um recurso subordinado), a atribuição de funções não é movida e torna-se órfã. Depois da mudança, terá de recriar a atribuição de funções. Eventualmente, a atribuição de funções órfã é removida de forma automática, mas recomendamos que remova a atribuição de funções antes da movimentação.
Para obter informações sobre como gerir as atribuições de funções, veja Listar atribuições de funções 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 VM com discos geridos exigiria que a VM e os discos geridos fossem movidos em conjunto, juntamente com outros recursos dependentes.
Se estiver a mover um recurso para uma nova subscrição, verifique se o recurso tem algum recurso dependente e se estão localizados no mesmo grupo de recursos. Se os recursos não estiverem no mesmo grupo de recursos, verifique se podem ser combinados no mesmo grupo de recursos. Em caso afirmativo, desloque todos estes recursos para o mesmo grupo de recursos ao utilizar uma operação de movimentação entre grupos 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 subscrição para outra é um processo de três passos:
Para efeitos de ilustração, temos 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
Para mover recursos, selecione o grupo de recursos que contém esses recursos.
Selecione os recursos que deseja 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 mudar de região, veja Mover recursos entre regiões (do grupo de recursos).
Selecione se está a mover os recursos para um novo grupo de recursos ou uma nova subscrição.
O grupo de recursos de origem é definido automaticamente. Especifique o grupo de recursos de destino. Se estiver a mover para uma nova subscrição, especifique também a subscriçã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.
Quando a movimentação estiver concluída, recebe uma notificação do resultado.
Utilizar a CLI do Azure
Validar
Para testar seu cenário de movimentação sem realmente mover os recursos, use o comando az resource invoke-action . Utilize este comando apenas quando precisar de determinar antecipadamente os resultados. Para executar esta operação, você precisa:
- ID do recurso do grupo de recursos de origem
- ID do recurso do grupo de recursos de destino
- ID do recurso de cada recurso a ser movido
No corpo da solicitação, use \"
para escapar de aspas duplas.
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, verá uma mensagem de erro a descrever o motivo pelo qual os recursos não podem ser movidos.
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use o comando az resource move . --ids
No parâmetro, forneça uma lista separada por espaço das IDs de recursos a serem movidas.
O exemplo seguinte mostra como mover vários recursos para um novo grupo de recursos. Ele funciona ao usar a CLI do Azure em um terminal Bash .
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
O próximo exemplo mostra como executar os mesmos comandos em um console do PowerShell .
$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
Para mover para uma nova assinatura, forneça o --destination-subscription-id
parâmetro.
Utilizar o Azure PowerShell
Validar
Para testar seu cenário de movimentação sem realmente mover os recursos, use o comando Invoke-AzResourceAction . Utilize este comando apenas quando precisar de determinar antecipadamente os resultados.
$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
}
Se a validação for bem-sucedida, nenhuma saída será exibida. No entanto, se a validação falhar, uma mensagem de erro será exibida, explicando os motivos pelos quais os recursos não podem ser movidos.
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 os recursos, use o método ResourceManagementClient.resources.begin_validate_move_resources . Use esse método somente quando precisar predeterminar os resultados.
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))
Se a validação for bem-sucedida, nenhuma saída será exibida. No entanto, se a validação falhar, uma mensagem de erro será exibida, explicando os motivos pelos quais os recursos não podem ser movidos.
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use o método ResourceManagementClient.resources.begin_move_resources . 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 operação validar movimento permite testar seu cenário de movimentação sem realmente mover os recursos. Use esta operação para verificar se a mudança foi bem-sucedida. A validação é chamada automaticamente quando você envia uma solicitação de movimentação. Use esta operação somente quando precisar predeterminar os resultados. 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
...
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 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>
Enquanto a operação ainda está em execução, você continua a receber o código de status 202. Aguarde o retry-after
número de segundos indicado no valor antes de tentar novamente. Se a operação de movimentação for validada com êxito, você receberá o código de status 204. Se a validação da movimentação falhar, você receberá uma mensagem de erro, como:
{"error":{"code":"ResourceMoveProviderValidationFailed","message":"<message>"...}}
Mover
Para mover recursos existentes para outro grupo de recursos ou assinatura, use a operação Mover recursos .
POST https://management.azure.com/subscriptions/{source-subscription-id}/resourcegroups/{source-resource-group-name}/moveResources?api-version={api-version}
No corpo da solicitação, você especifica o grupo de recursos de destino e os recursos a serem movidos.
{
"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á em execução há quase uma hora. Há algo errado?
A movimentação de recursos é uma operação complexa e que tem diferentes fases. Pode envolver mais do que apenas o fornecedor do recurso que está a tentar mover. Devido às dependências entre os fornecedores de recursos, o Azure Resource Manager concede uma tolerância de quatro horas para que a operação seja concluída. Este período de tempo dá aos fornecedores de recursos uma possibilidade de recuperar de problemas transitórios. Se o pedido de movimentação estiver dentro do período de quatro horas, a operação continuará a tentar concluir e poderá ser bem-sucedida. Durante este tempo, os grupos de recursos de origem e de destino estão bloqueados 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?
É dado um máximo de quatro horas para a conclusão dos pedidos de movimentação. Para evitar que as modificações aos recursos sejam movidas, tanto os grupos de recursos de origem como de destino são bloqueados durante a movimentação.
Os pedidos de movimentação têm duas fases. Na primeira fase, o recurso é movido. Na segunda, são enviadas notificações para os outros fornecedores de recursos que dependem do recurso que está a ser movido. Quando um fornecedor de recursos falha uma das fases, o grupo de recursos pode ficar bloqueado durante as quatro horas. Durante o período permitido, o Resource Manager repete o passo mal-sucedido.
Se não for possível mover um recurso dentro das quatro horas, o Resource Manager desbloqueia ambos os grupos de recursos. Os recursos que foram movidos estão no grupo de recursos de destino. Os recursos cuja movimentação falhou ficam 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. Em segundo lugar, dentro de cada grupo de recursos, o bloqueio impede que você crie um novo recurso, exclua um recurso ou atualize as propriedades de um recurso (por exemplo, alterar o tamanho de uma VM).
A imagem seguinte mostra uma mensagem de erro do portal do Azure quando um utilizador tenta eliminar um grupo de recursos que faz parte de uma movimentação em curso.
Na imagem abaixo, o recurso VM pertence a um grupo de recursos ("TestB") que está atualmente passando por uma operação de movimentação. Quando um usuário tenta atualizar uma propriedade da VM, como seu tamanho, o portal do Azure retorna uma mensagem de erro. Isso ocorre porque o grupo de recursos é bloqueado durante a mudança, impedindo quaisquer modificações em seus recursos.
Além disso, durante uma movimentação de recurso, nem o grupo de recursos de origem nem o de destino podem participar de outras operações de movimentação simultaneamente. Por exemplo, se os recursos estiverem sendo movidos do Grupo de Recursos A para o Grupo de Recursos B, nem o Grupo A nem o Grupo B poderão estar envolvidos em outra operação de movimentação, como mover recursos de ou para o Grupo de Recursos C, ao mesmo tempo. Essa restrição garante que os grupos de recursos não sejam bloqueados por várias operações conflitantes durante o processo de movimentação.
O que significa o código de erro "MissingMoveDependentResources"?
Quando move um recurso, os recursos dependentes devem existir na subscrição ou no grupo de recursos de destino ou devem ser incluídos no pedido de movimentação. O código de erro MissingMoveDependentResources é obtido quando um recurso dependente não cumpre este requisito. A mensagem de erro tem detalhes sobre o recurso dependente que tem de ser incluído no pedido 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 a movimentação de uma rede virtual. Poderá ter de mover vários outros recursos associados a essa rede virtual. O pedido de movimentação poderá exigir que os endereços IP públicos, as tabelas de rotas, os gateways de rede virtual, os grupos de segurança de rede, entre outros, sejam movidos. Em geral, um gateway da rede virtual deve estar sempre no mesmo grupo de recursos que a sua rede virtual, não podendo ser movido separadamente.
O que significa o código de erro "RequestDisallowedByPolicy"?
Antes de tentar fazer a movimentação, o Resource Manager valida o seu pedido. Essa validação inclui verificar as políticas definidas nos recursos que estão envolvidos na movimentação. Por exemplo, se pretender mover um cofre de chaves, mas a sua organização tiver uma política que não permite criar um cofre de chaves no grupo de recursos de destino, a validação falha e a movimentação é bloqueada. 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?
Atualmente, nem todos os recursos do Azure suportam movimentação. Para obter uma lista dos recursos que podem ser movidos, veja Suporte da operação de movimentação para recursos.
Quantos recursos posso mover numa só operação?
Quando possível, divida movimentações grandes em operações de movimentação separadas. O Resource Manager devolve imediatamente um erro quando há mais de 800 recursos numa única operação. No entanto, a movimentação de menos de 800 recursos também pode falhar por exceder o tempo limite.
Qual é o significado do erro de que um recurso não está no estado Com Êxito?
Quando recebe uma mensagem de erro a indicar que não foi possível mover um recurso porque não está num estado Com Êxito, pode tratar-se de um recurso dependente que está a bloquear a movimentação. Normalmente, o código de erro é MoveCannotProceedWithResourcesNotInSucceededState.
Se o grupo de recursos de origem ou de destino tiver uma rede virtual, os estados de todos os recursos dependentes da rede virtual serão verificados durante a movimentação. A verificação inclui os recursos que estão direta e indiretamente dependentes da rede virtual. Se algum desses recursos estiver num estado com falha, a movimentação é bloqueada. Por exemplo, se uma máquina virtual que utiliza a rede virtual falhar, a movimentação será bloqueada. A movimentação é bloqueada mesmo quando a máquina virtual não é um dos recursos a ser movido e não é um dos grupo de recursos a ser movido.
Quando recebe este erro, tem duas opções. Ou move os recursos para um grupo de recursos que não tenha uma rede virtual ou contacta 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. No entanto, pode mover todos os recursos do grupo de recursos para um grupo de recursos noutra subscrição. As definições tais como etiquetas, atribuições de funções e políticas não são transferidas automaticamente do grupo de recursos original para o grupo de recursos de destino. Tem de reaplicar estas definições no novo grupo de recursos. Para obter mais informações, consulte Mover recursos para um novo grupo de recursos ou subscrição.
Próximos passos
Para obter uma lista dos recursos que podem ser movidos, veja Suporte da operação de movimentação para recursos.