Mover recursos para um novo grupo de recursos ou subscrição

Este artigo mostra-lhe como mover recursos do Azure para outra subscrição do Azure ou outro grupo de recursos na mesma subscrição. 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.

ID de recurso alterado

Quando move um recurso, altera o respetivo ID de recurso. O formato padrão para um 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 utilizar o ID do recurso em qualquer lugar, terá de alterar esse valor. Por exemplo, se tiver um dashboard personalizado no portal que faça referência a um ID de recurso, terá de atualizar esse valor. Procure quaisquer scripts ou modelos que precisem 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.

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

  2. As subscrições de origem e de destino têm de existir no mesmo inquilino do Azure Active Directory. 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
    

    Na 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:

  3. Se estiver a tentar mover recursos de/para um parceiro do Fornecedor de Soluções Cloud (CSP), veja Transferir subscrições do Azure entre subscritores e CSPs.

  4. Os recursos que quer mover devem suportar a operação de movimentação. Para obter uma lista dos recursos que suportam a movimentação, veja Suporte da operação de movimentação para recursos.

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

  6. A subscrição de destino tem de estar registada no fornecedor de recursos do recurso a ser movido. Caso contrário, receberá um erro a indicar que a subscrição não está registada 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
    
  7. 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.

  8. 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.
  9. 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 atribuições de funções, veja Listar atribuições de funções do Azure e Atribuir funções do Azure.

  10. 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, veja Cenário de movimentação entre subscrições.

Cenário para mover entre subscrições

Mover recursos de uma subscrição para outra é um processo de três passos:

cenário de movimentação entre subscrições

Para efeitos de ilustração, temos apenas um recurso dependente.

  • Passo 1: se os recursos dependentes forem distribuídos por diferentes grupos de recursos, primeiro mova-os para um grupo de recursos.
  • Passo 2: mover o recurso e os recursos dependentes em conjunto da subscrição de origem para a subscrição de destino.
  • Passo 3: opcionalmente, redistribua os recursos dependentes para diferentes grupos de recursos na subscrição de destino.

Utilizar o portal

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

Selecione os recursos que pretende mover. Para mover todos os recursos, selecione a caixa de verificação na parte superior da lista. Em alternativa, selecione os recursos individualmente.

selecionar recursos

Selecione o botão Mover.

opções de movimentação

Este botão dá-lhe três opções:

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.

selecionar grupo de recursos de destino

O portal valida que os recursos podem ser movidos. Aguarde que a validação seja concluída.

Validação de movimentação

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.

selecionar destino

Quando a movimentação estiver concluída, recebe uma notificação do resultado.

ver resultados de movimentação

Utilizar o Azure PowerShell

Validação

Para testar o seu cenário de movimentação sem realmente mover os recursos, utilize o comando Invoke-AzResourceAction . Utilize este comando apenas quando precisar de determinar antecipadamente os resultados. Para executar esta operação, precisa de:

  • ID do Recurso do grupo de recursos de origem
  • ID do Recurso do grupo de recursos de destino
  • ID de recurso de cada recurso a mover
Invoke-AzResourceAction -Action validateMoveResources `
-ResourceId "/subscriptions/{subscription-id}/resourceGroups/{source-rg}" `
-Parameters @{ 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, não verá 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 subscrição, utilize o comando Move-AzResource . O exemplo seguinte mostra como mover vários recursos para um novo grupo de recursos.

$webapp = Get-AzResource -ResourceGroupName OldRG -ResourceName ExampleSite
$plan = Get-AzResource -ResourceGroupName OldRG -ResourceName ExamplePlan
Move-AzResource -DestinationResourceGroupName NewRG -ResourceId $webapp.ResourceId, $plan.ResourceId

Para mudar para uma nova subscrição, inclua um valor para o DestinationSubscriptionId parâmetro.

Utilizar a CLI do Azure

Validação

Para testar o seu cenário de movimentação sem realmente mover os recursos, utilize o comando az resource invoke-action . Utilize este comando apenas quando precisar de determinar antecipadamente os resultados. Para executar esta operação, precisa de:

  • ID do Recurso do grupo de recursos de origem
  • ID do Recurso do grupo de recursos de destino
  • ID de recurso de cada recurso a mover

No corpo do pedido, utilize \" para escapar a 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 subscrição, utilize o comando az resource move . --ids No parâmetro, forneça uma lista separada por espaço dos IDs de recurso a mover.

O exemplo seguinte mostra como mover vários recursos para um novo grupo de recursos. Funciona ao utilizar a CLI do Azure num terminal do 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 exemplo seguinte mostra como executar os mesmos comandos numa consola 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 mudar para uma nova subscrição, forneça o --destination-subscription-id parâmetro .

Utilizar a API REST

Validação

A operação validar movimentação permite-lhe testar o cenário de movimentação sem mover os recursos. Utilize esta operação para verificar se a movimentação será bem-sucedida. A validação é chamada automaticamente quando envia um pedido de movimentação. Utilize esta operação apenas quando precisar de pré-determinar os resultados. Para executar esta operação, precisa de:

  • Nome do grupo de recursos de origem
  • ID do Recurso do grupo de recursos de destino
  • ID de recurso de cada recurso a mover
  • O token de acesso da 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 do pedido:

{
 "resources": ["<resource-id-1>", "<resource-id-2>"],
 "targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}

Se o pedido estiver formatado corretamente, a operação devolverá:

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 estado 202 indica que o pedido de validação foi aceite, mas ainda não determinou se a operação de movimentação terá êxito. O location valor contém um URL que utiliza para verificar o estado da operação de execução prolongada.

Para verificar o estado, envie o seguinte pedido:

GET <location-url>
Authorization: Bearer <access-token>

Enquanto a operação ainda está em execução, continua a receber o código de estado 202. Aguarde o número de segundos indicado no retry-after valor antes de tentar novamente. Se a operação de movimentação for validada com êxito, receberá o código de estado 204. Se a validação de movimentação falhar, receberá uma mensagem de erro, como:

{"error":{"code":"ResourceMoveProviderValidationFailed","message":"<message>"...}}

Mover

Para mover recursos existentes para outro grupo de recursos ou subscrição, utilize 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 do pedido, especifique o grupo de recursos de destino e os recursos a mover.

{
 "resources": ["<resource-id-1>", "<resource-id-2>"],
 "targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}

Perguntas mais frequentes

Pergunta: A minha operação de movimentação de recursos, que normalmente demora alguns minutos, está em execução há quase uma hora. Há algo de 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.

Pergunta: Porque é que o meu grupo de recursos está bloqueado durante quatro horas durante a movimentação de 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 foram movidos são deixados no grupo de recursos de origem.

Pergunta: Quais são as implicações dos grupos de recursos de origem e de destino que estão a ser bloqueados durante a movimentação do recurso?

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

Mover mensagem de erro a tentar eliminar

Pergunta: O que significa o código de erro "MissingMoveDependentResources"?

Quando move um recurso, os respetivos recursos dependentes têm de existir no grupo de recursos de destino ou na subscrição ou 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.

Pergunta: 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 é Azure Policy?.

Pergunta: Por que motivo não consigo mover alguns recursos no Azure?

Atualmente, nem todos os recursos no suporte do Azure mover. Para obter uma lista dos recursos que suportam a movimentação, veja Suporte da operação de movimentação para recursos.

Pergunta: Quantos recursos posso mover numa única 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.

Pergunta: 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 os recursos para um grupo de recursos que não tenha uma rede virtual ou contacte o suporte.

Passos seguintes

Para obter uma lista dos recursos que suportam a movimentação, veja Suporte da operação de movimentação para recursos.