Mover recursos do Azure para um novo grupo de recursos ou subscrição
Este artigo mostra como mover recursos do Azure para outra assinatura do Azure ou outro grupo de recursos na mesma assinatura. Para mover recursos, pode utilizar o portal do Azure, o Azure PowerShell, a CLI do Azure ou a API REST.
Tanto o grupo de origem como o grupo de destino estão bloqueados durante a operação de movimentação. As operações de escrita e de eliminação ficam bloqueadas nos grupos de recursos até que a movimentação esteja concluída. Este bloqueio significa que não pode adicionar, atualizar ou eliminar recursos nos grupos de recursos. Não significa que os recursos estão bloqueados. Por exemplo, se mover um servidor lógico do SQL do Azure, as respetivas bases de dados e outros recursos dependentes para um novo grupo de recursos ou subscrição, as aplicações que utilizam as bases de dados não sofrem tempo de inatividade. Continuam a poder ler e escrever nas bases de dados. O bloqueio pode durar, no máximo, quatro horas, mas a maioria das movimentações fica concluída em muito menos tempo.
Se a movimentação implicar a configuração de novos recursos dependentes, irá sofrer uma interrupção nesses serviços até serem reconfigurados.
Mover um recurso apenas o move para um grupo de recursos ou uma subscrição novos. Não altera a localização do recurso.
Nota
Não é possível mover recursos do Azure para outro grupo de recursos ou outra assinatura se houver um bloqueio somente leitura, seja na origem ou no destino.
ID do recurso alterado
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}
. Ao mover um recurso para um novo grupo de recursos ou assinatura, você 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 scripts ou modelos que precisem ser atualizados para a nova 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.
No Azure PowerShell, utilize:
(Get-AzSubscription -SubscriptionName <your-source-subscription>).TenantId (Get-AzSubscription -SubscriptionName <your-destination-subscription>).TenantId
Para a CLI do Azure, utilize:
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 estiver a tentar mover recursos de ou para um parceiro do Fornecedor de Soluções na Nuvem (CSP), consulte 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 suportam a movimentação, consulte Mover suporte de operaçã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 mudança dos Serviços na Nuvem (suporte estendido)
- 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, 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 em que esta nunca foi utilizada com esse tipo de recurso.
Para o PowerShell, utilize os seguintes comandos para obter o estado do registo:
Set-AzContext -Subscription <destination-subscription-name-or-id> Get-AzResourceProvider -ListAvailable | Select-Object ProviderNamespace, RegistrationState
Para registar um fornecedor de recursos, utilize:
Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
Para a CLI do Azure, utilize os seguintes comandos para obter o estado do registo:
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, utilize:
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 a movimentação dos recursos significar que a subscrição vai exceder os limites, tem de descobrir se pode pedir um aumento da quota. 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.
- Etapa 1: Se os recursos dependentes forem distribuídos em diferentes grupos de recursos, 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 diferentes grupos de recursos dentro da assinatura de destino.
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 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 aprovada, você não verá nenhuma saída.
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 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 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 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 aprovada, você não verá nenhuma saída.
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 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 será 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 que não conseguiram mover são deixados 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-o de eliminar qualquer um dos grupos de recursos, criar um novo recurso em qualquer um dos grupos de recursos ou eliminar qualquer um dos recursos envolvidos na movimentação.
A imagem a seguir mostra uma mensagem de erro do portal do Azure quando um usuário tenta excluir um grupo de recursos que faz parte de uma movimentação em andamento.
O que significa o código de erro "MissingMoveDependentResources"?
Quando você move um recurso, seus recursos dependentes devem existir no grupo de recursos ou na assinatura de destino ou ser incluídos na solicitação 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 de rede virtual deve estar sempre no mesmo grupo de recursos que sua rede virtual, eles não podem ser movidos 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 retornado é 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 no suporte do Azure são movidos. Para obter uma lista de recursos que suportam movimentação, consulte Suporte de 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. 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 é possível mover um grupo de recursos para uma nova assinatura. Mas, você pode mover todos os recursos no 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 reaplicar essas configurações ao novo grupo de recursos. Para obter mais informações, consulte Mover recursos para um novo grupo de recursos ou subscrição.
Cenários não suportados
A plataforma bloqueia um cenário em que os recursos da Subscrição A são migrados para a Subscrição B quando , ao mesmo tempo , os recursos da Subscrição B são migrados para a Subscrição C. Isso é por design.
Próximos passos
Para obter uma lista dos recursos que suportam a movimentação, consulte Mover suporte de operação para recursos.