Flytta Azure-resurser till en ny resursgrupp eller prenumeration

Den här artikeln visar hur du flyttar Azure-resurser till en annan Azure-prenumeration eller till en annan resursgrupp under samma prenumeration. Du kan använda Azure-portalen, Azure PowerShell, Azure CLI eller REST-API:et för att flytta resurser.

Både källgruppen och målgruppen är låsta under flyttåtgärden. Skriv- och borttagningsåtgärder blockeras för resursgrupperna tills flytten är klar. Det här låset innebär att du inte kan lägga till, uppdatera eller ta bort resurser i resursgrupperna. Det innebär inte att resurserna fryses. Om du till exempel flyttar en logisk Azure SQL-server, dess databaser och andra beroende resurser till en ny resursgrupp eller prenumeration upplever inte eventuella program som använder databaserna något driftstopp. De kan fortfarande läsa och skriva till databaserna. Låset ligger kvar i högst fyra timmar, men de flesta flyttar slutförs på mycket kortare tid.

Om det ingår att konfigurera nya beroende resurser i flytten uppstår ett avbrott i tjänsterna tills de har konfigurerats om.

Om du flyttar en resurs flyttas den bara till en ny resursgrupp eller prenumeration. Resursens plats ändras inte.

Resurs-ID har ändrats

När du flyttar en resurs ändrar du dess resurs-ID. Standardformatet för ett resurs-ID är /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. När du flyttar en resurs till en ny resursgrupp eller prenumeration ändrar du ett eller flera värden i den sökvägen.

Om du använder resurs-ID:t någonstans måste du ändra det värdet. Om du till exempel har en anpassad instrumentpanel i portalen som refererar till ett resurs-ID måste du uppdatera det värdet. Leta efter skript eller mallar som behöver uppdateras för det nya resurs-ID:t.

Checklista för att flytta resurser

Några viktiga steg måste utföras innan en resurs flyttas. Du kan undvika fel genom att verifiera dessa villkor.

  1. Både käll- och målprenumerationen måste vara aktiv. Om du har problem med att aktivera ett konto som har inaktiverats skapar du en Azure-supportbegäran. Välj Prenumerationshantering som typ av ärende.

  2. Käll- och målprenumerationerna måste finnas inom samma Microsoft Entra-klientorganisation. Du kan kontrollera att båda prenumerationerna har samma klientorganisations-ID via Azure PowerShell eller Azure CLI.

    För Azure PowerShell, använd:

    (Get-AzSubscription -SubscriptionName <your-source-subscription>).TenantId
    (Get-AzSubscription -SubscriptionName <your-destination-subscription>).TenantId
    

    Om du använder Azure CLI använder du:

    az account show --subscription <your-source-subscription> --query tenantId
    az account show --subscription <your-destination-subscription> --query tenantId
    

    Om klientorganisations-ID:erna för käll- och målprenumerationen inte är desamma använder du följande metoder för att stämma av klientorganisations-ID:n:

  3. Om du försöker flytta resurser till eller från en Molnlösningsleverantör partner (CSP) kan du läsa Överföra Azure-prenumerationer mellan prenumeranter och CSP:er.

  4. De resurser du vill flytta måste ha stöd för flyttåtgärden. En lista över vilka resurser som stöder flytt finns i Stöd för flyttåtgärder för resurser.

  5. Vissa tjänster har specifika begränsningar eller krav när du flyttar resurser. Om du flyttar någon av följande tjänster kontrollerar du den här vägledningen innan du flyttar.

  6. Målprenumerationen måste vara registrerad för resursprovidern för den resurs som flyttas. Om inte får du ett felmeddelande om att prenumerationen inte har registrerats för en resurstyp. Du kan se det här felet när du flyttar en resurs till en ny prenumeration och prenumerationen aldrig har använts med den aktuella resurstypen.

    Med PowerShell använder du följande kommandon för att visa registreringsstatusen:

    Set-AzContext -Subscription <destination-subscription-name-or-id>
    Get-AzResourceProvider -ListAvailable | Select-Object ProviderNamespace, RegistrationState
    

    Så här registrerar du en resursåterförsäljare:

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

    Med Azure CLI använder du följande kommandon för att visa registreringsstatusen:

    az account set -s <destination-subscription-name-or-id>
    az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table
    

    Så här registrerar du en resursåterförsäljare:

    az provider register --namespace Microsoft.Batch
    
  7. Innan du flyttar resurserna kontrollerar du prenumerationskvoterna för den prenumeration du flyttar resurserna till. Om flytten av resurserna innebär att prenumerationen överskrider sina gränser måste du se efter om du kan begära en ökning av kvoten. Du hittar en lista med begränsningar och hur du begär en ökning i Gränser, kvoter och begränsningar för prenumerationer och tjänster i Azure.

  8. Kontot som flyttar resurserna måste ha minst följande behörigheter:

    • Microsoft.Resources/subscriptions/resourceGroups/moveResources/action för källresursgruppen.
    • Microsoft.Resources/subscriptions/resourceGroups/write för målresursgruppen.
  9. Om du flyttar en resurs som har en Azure-roll tilldelad direkt till resursen (eller en underordnad resurs) flyttas inte rolltilldelningen, vilket innebär att du får en överbliven rolltilldelning. Efter flytten måste du skapa rolltilldelningen på nytt. Den överblivna rolltilldelningen tas bort automatiskt så småningom, men vi rekommenderar att du tar bort rolltilldelningen innan flytten.

    Information om hur du hanterar rolltilldelningar finns i Lista Azure-rolltilldelningar och Tilldela Azure-roller.

  10. Om flytten går mellan olika prenumerationer måste resursen och dess beroende resurser finnas i samma resursgrupp, och de måste flyttas tillsammans. För exempelvis en virtuell dator med hanterade diskar måste den virtuella datorn och de hanterade diskarna flyttas tillsammans, samt med andra eventuella, beroende resurser.

    Om du flyttar en resurs till en ny prenumeration kontrollerar du om resursen har några beroende resurser, och om de ligger i samma resursgrupp. Om resurserna inte ligger i samma resursgrupp kontrollerar du om resurserna kan sammanföras till samma resursgrupp. I så fall flyttar du resurserna till samma resursgrupp genom att använda en flyttåtgärd mellan resursgrupper.

    Mer information finns i Scenario för att flytta mellan prenumerationer.

Scenario för att flytta mellan prenumerationer

Att flytta resurser från en prenumeration till en annan är en process i tre steg:

Diagram that shows the three-step process of moving resources across subscriptions.

Vi har bara en beroende resurs för att visa principen.

  • Steg 1: Om beroende resurser distribueras mellan olika resursgrupper flyttar du dem först till en resursgrupp.
  • Steg 2: Flytta resursen och de beroende resurserna från källprenumerationen till målprenumerationen.
  • Steg 3: Om du vill kan du omdistribuera de beroende resurserna till olika resursgrupper i målprenumerationen.

Använda portalen

Om du vill flytta resurser väljer du den resursgrupp som innehåller dessa resurser.

Välj de resurser som du vill flytta. Om du vill flytta alla resurser markerar du kryssrutan överst i listan. Du kan också välja enskilda resurser.

Screenshot of the Azure portal showing the selection of resources to move.

Välj knappen Flytta.

Screenshot of the Azure portal displaying the Move button with three options.

Den här knappen ger dig tre alternativ:

Välj om du flyttar resurserna till en ny resursgrupp eller en ny prenumeration.

Källresursgruppen anges automatiskt. Ange målresursgruppen. Om du flyttar till en ny prenumeration anger du även prenumerationen. Välj Nästa.

Screenshot of the Azure portal where the user specifies the destination resource group for the move operation.

Portalen validerar att resurserna kan flyttas. Vänta tills valideringen har slutförts.

Screenshot of the Azure portal showing the validation process for the move operation.

När valideringen är klar väljer du Nästa.

Kontrollera om du behöver uppdatera verktyg och skript för resurserna. Börja flytta resurserna genom att välja Flytta.

Screenshot of the Azure portal where the user acknowledges the need to update tools and scripts before starting the move operation.

När flytten är klar meddelas du om resultatet.

Screenshot of the Azure portal displaying a notification with the results of the move operation.

Använda Azure PowerShell

Validera

Om du vill testa ditt flyttscenario utan att faktiskt flytta resurserna använder du kommandot Invoke-AzResourceAction . Använd bara det här kommandot när du behöver se resultatet i förväg.

$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
   }

Om valideringen godkänns ser du inga utdata.

Om valideringen misslyckas ser du ett felmeddelande som beskriver varför resurserna inte kan flyttas.

Flytta

Om du vill flytta befintliga resurser till en annan resursgrupp eller prenumeration använder du kommandot Move-AzResource . I följande exempel visas hur du flyttar flera resurser till en ny resursgrupp.

$sourceName = "sourceRG"
$destinationName = "destinationRG"
$resourcesToMove = @("app1", "app2")

$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }

Move-AzResource -DestinationResourceGroupName $destinationName -ResourceId $resources.ResourceId

Om du vill flytta till en ny prenumeration lägger du till ett värde för parametern DestinationSubscriptionId .

Använda Azure CLI

Validera

Om du vill testa ditt flyttscenario utan att flytta resurserna använder du kommandot az resource invoke-action . Använd bara det här kommandot när du behöver se resultatet i förväg. Om du vill köra den här åtgärden behöver du:

  • Resurs-ID för källresursgruppen
  • Resurs-ID för målresursgruppen
  • Resurs-ID för varje resurs som ska flyttas

Använd i begärandetexten \" för att undvika dubbla citattecken.

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}\" }" 

Om valideringen lyckas ser du:

{} Finished .. 

Om valideringen misslyckas ser du ett felmeddelande som beskriver varför resurserna inte kan flyttas.

Flytta

Om du vill flytta befintliga resurser till en annan resursgrupp eller prenumeration använder du kommandot az resource move . I parametern --ids anger du en blankstegsavgränsad lista över resurs-ID:t som ska flyttas.

I följande exempel visas hur du flyttar flera resurser till en ny resursgrupp. Det fungerar när du använder Azure CLI i en Bash-terminal .

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

I nästa exempel visas hur du kör samma kommandon i en PowerShell-konsol .

$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

Om du vill flytta till en ny prenumeration anger du parametern --destination-subscription-id .

Använda Python

Validera

Om du vill testa ditt flyttscenario utan att flytta resurserna använder du metoden ResourceManagementClient.resources.begin_validate_move_resources . Använd endast den här metoden när du behöver förbestäma resultatet.

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

Om valideringen godkänns ser du inga utdata.

Om valideringen misslyckas ser du ett felmeddelande som beskriver varför resurserna inte kan flyttas.

Flytta

Om du vill flytta befintliga resurser till en annan resursgrupp eller prenumeration använder du metoden ResourceManagementClient.resources.begin_move_resources . I följande exempel visas hur du flyttar flera resurser till en ny resursgrupp.

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
    }
)

Använda REST-API

Validera

Med åtgärden verifiera flytt kan du testa ditt flyttscenario utan att faktiskt flytta resurserna. Använd den här åtgärden för att kontrollera om flytten lyckas. Verifiering anropas automatiskt när du skickar en flyttbegäran. Använd endast den här åtgärden när du behöver förbestäma resultatet. Om du vill köra den här åtgärden behöver du:

  • Namnet på källresursgruppen
  • Resurs-ID för målresursgruppen
  • Resurs-ID för varje resurs som ska flyttas
  • Åtkomsttoken för ditt konto

Skicka följande begäran:

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

Med en begärandetext:

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

Om begäran är korrekt formaterad returnerar åtgärden:

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

Statuskoden 202 anger att valideringsbegäran godkändes, men det har ännu inte fastställt om flyttåtgärden kommer att lyckas. Värdet location innehåller en URL som du använder för att kontrollera statusen för den långvariga åtgärden.

Skicka följande begäran för att kontrollera statusen:

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

Medan åtgärden fortfarande körs fortsätter du att ta emot statuskoden för 202. Vänta det antal sekunder som anges i värdet retry-after innan du försöker igen. Om flyttåtgärden verifieras får du statuskoden 204. Om flyttverifieringen misslyckas får du ett felmeddelande, till exempel:

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

Flytta

Om du vill flytta befintliga resurser till en annan resursgrupp eller prenumeration använder du åtgärden Flytta resurser .

POST https://management.azure.com/subscriptions/{source-subscription-id}/resourcegroups/{source-resource-group-name}/moveResources?api-version={api-version}

I begärandetexten anger du målresursgruppen och de resurser som ska flyttas.

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

Vanliga frågor och svar

Fråga: Min resursflyttningsåtgärd, som vanligtvis tar några minuter, har körts i nästan en timme. Är det något fel?

Att flytta en resurs är en komplex åtgärd som har olika faser. Det kan handla om mer än bara resursprovidern av den resurs du försöker flytta. På grund av beroenden mellan resursprovidrar tillåter Azure Resource Manager att åtgärden slutförs inom 4 timmar. Den här tidsperioden ger resursprovidrar möjlighet att återställa från tillfälliga problem. Om din flyttbegäran ligger inom denna period på fyra timmar görs försök att slutföra åtgärden och det kan fortfarande lyckas. Käll- och målresursgrupperna är låsta under den här tiden för att undvika konsekvensproblem.

Fråga: Varför är min resursgrupp låst i fyra timmar under resursflytten?

En flyttbegäran får ta högst fyra timmar att genomföra. För att förhindra ändringar av de resurser som flyttas låses både käll- och målresursgrupperna under resursflytten.

En flyttbegäran består av två faser. Under den första fasen flyttas resursen. Under den andra fasen skickas meddelanden till andra resursprovidrar, vilka är beroende av att resursen flyttas. En resursgrupp kan låsas under hela fyra timmar när en resursprovider misslyckas i någon av faserna. Under den tillåtna tiden försöker Resource Manager utföra det misslyckade steget igen.

Om en resurs inte kan flyttas inom fyra timmar låser Resource Manager upp båda resursgrupperna. Resurser som har flyttats finns i målresursgruppen. Resurser som inte kunde flyttas lämnas kvar i källresursgruppen.

Fråga: Vilka är konsekvenserna av att käll- och målresursgrupperna låses under resursflytten?

Låset förhindrar att du tar bort någon av resursgrupperna, skapar en ny resurs i resursgruppen eller tar bort någon av resurserna som ingår i flytten.

Följande bild visar ett felmeddelande från Azure-portalen när en användare försöker ta bort en resursgrupp som ingår i en pågående flytt.

Screenshot of the Azure portal showing an error message when trying to delete a resource group involved in an ongoing move operation.

Fråga: Vad betyder felkoden "MissingMoveDependentResources"?

När du flyttar en resurs måste dess beroende resurser antingen finnas i målresursgruppen eller prenumerationen eller inkluderas i flyttbegäran. Du får felkoden MissingMoveDependentResources när en beroende resurs inte uppfyller det här kravet. Felmeddelandet innehåller information om den beroende resurs som måste ingå i flyttbegäran.

Om du till exempel flyttar en virtuell dator kan du behöva flytta sju resurstyper med tre olika resursprovidrar. Dessa resursprovidrar och resurstyper är:

  • Microsoft.Compute

    • VirtualMachines
    • disks
  • Microsoft.Network

    • Nätverksgränssnitt
    • publicIPAddresses
    • nätverksrelateradeSäkerhetsgrupper
    • virtualNetworks
  • Microsoft.Storage

    • Lagringskonton

Ett annat vanligt exempel är att flytta ett virtuellt nätverk. Du kan behöva flytta flera andra resurser som är kopplade till det virtuella nätverket. Flyttbegäran kan kräva flytt av offentliga IP-adresser, routningstabeller, virtuella nätverksgatewayer, nätverkssäkerhetsgrupper med mera. I allmänhet måste en virtuell nätverksgateway alltid finnas i samma resursgrupp som det virtuella nätverket. De kan inte flyttas separat.

Fråga: Vad betyder felkoden "RequestDisallowedByPolicy"?

Resource Manager verifierar din flyttbegäran innan du försöker flytta. Den här verifieringen omfattar kontrollprinciper som definierats för de resurser som ingår i flytten. Om du till exempel försöker flytta ett nyckelvalv men din organisation har en princip som nekar skapandet av ett nyckelvalv i målresursgruppen, misslyckas verifieringen och flytten blockeras. Den returnerade felkoden är RequestDisallowedByPolicy.

Mer information om principer finns i Vad är Azure Policy?.

Fråga: Varför kan jag inte flytta vissa resurser i Azure?

För närvarande flyttas inte alla resurser i Azure-supporten. En lista över resurser som stöder flytt finns i Stöd för flyttåtgärder för resurser.

Fråga: Hur många resurser kan jag flytta i en enda åtgärd?

När det är möjligt kan du dela upp stora flyttåtgärder i separata flyttåtgärder. Resource Manager returnerar omedelbart ett fel när det finns fler än 800 resurser i en enda åtgärd. Men att flytta mindre än 800 resurser kan också misslyckas om tidsgränsen nås.

Fråga: Vad är innebörden av felet att en resurs inte är i tillståndet lyckades?

När du får ett felmeddelande som anger att en resurs inte kan flyttas eftersom den inte har statusen för slutfört läge kan det i själva verket vara en beroende resurs som blockerar flytten. Normalt är felkoden MoveCannotProceedWithResourcesNotInSucceededState.

Om käll- eller målresursgruppen innehåller ett virtuellt nätverk kontrolleras tillstånden för alla beroende resurser för det virtuella nätverket under flytten. Kontrollen omfattar resurser som är direkt och indirekt beroende av det virtuella nätverket. Om någon av dessa resurser är i ett misslyckat tillstånd blockeras flytten. Om till exempel en virtuell dator som använder det virtuella nätverket har ett feltillstånd blockeras flytten. Flytten blockeras även om den virtuella datorn inte är en av resurserna som flyttas och inte finns i någon av resursgrupperna för flytten.

När du får det här felet har du två alternativ. Flytta dina resurser till en resursgrupp som inte har något virtuellt nätverk eller kontakta supporten.

Nästa steg

En lista över vilka resurser som stöder flytt finns i Stöd för flyttåtgärder för resurser.