Dela via


Flytta Azure-resurser till en ny resursgrupp eller prenumeration

Den här artikeln beskriver hur du flyttar Azure-resurser mellan resursgrupper, oavsett om de ingår i samma prenumeration eller mellan olika prenumerationer. Om flytten omfattar olika prenumerationer måste båda prenumerationerna ingå i samma Microsoft Entra-ID-klientorganisation. Du kan utföra flytten med hjälp av verktyg som Azure Portal, Azure PowerShell, Azure CLI, REST API eller Python.

Under flyttåtgärden är både käll- och målresursgrupperna låsta. Det innebär att du inte kan skapa, ta bort eller uppdatera resurser i dessa resursgrupper medan flytten pågår. Befintliga resurser är dock fortfarande fullt driftsdugliga. Om du till exempel flyttar en virtuell dator (VM) från en resursgrupp till en annan kan den virtuella datorn inte tas bort och dess egenskaper (till exempel VM-storlek) kan inte ändras under flytten. Trots detta fortsätter den virtuella datorn att fungera normalt, och tjänster som förlitar sig på den kommer inte att uppleva någon ytterligare stilleståndstid. Låset kan pågå i upp till fyra timmar, men de flesta rörelserna slutförs snabbare och låset tas bort i enlighet med detta.

Endast resurser på den översta nivån (överordnad) ska anges i flyttbegäran. Underordnade resurser flyttas automatiskt tillsammans med sina överordnade resurser, men kan inte flyttas oberoende av varandra. Till exempel kan en överordnad resurs som Microsoft.Compute/virtualMachines kan flyttas och dess underordnade resurs, till exempel Microsoft.Compute/virtualMachines/extensions, flyttas med den. Den underordnade resursen kan dock inte flyttas på egen hand.

När du flyttar en resurs bevaras dess beroenden med underordnade resurser, men beroenden med andra resurser kan brytas och kräva omkonfiguration. Om du flyttar en resurs ändras bara den associerade resursgruppen. Den ändrar inte resursens fysiska region.

Kommentar

Azure-resurser kan inte flyttas om det finns ett skrivskyddat lås på käll- eller målresursgruppen eller prenumerationen.

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 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 med 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ålprenumerationer 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.

    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 CSP-partner (Cloud Solution Provider) kan du läsa Överföra Azure-prenumerationer mellan prenumeranter och molnlösningsleverantörer.

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

  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 den inte är det visas 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.

    Så här hämtar du 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 resursprovider:

    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 granska 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 som visar trestegsprocessen för att flytta resurser mellan prenumerationer.

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

  • Steg 1: Om de beroende resurserna ligger i olika resursgrupper ska du först flytta dem till samma resursgrupp.
  • Steg 2: Flytta resursen och de beroende resurserna tillsammans från käll- till målprenumerationen.
  • Steg 3: Välj eventuellt att fördela de beroende resurserna till andra resursgrupper under målprenumerationen.

Flytta resurser

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.

Skärmbild av Azure Portal som visar valet av resurser att flytta.

Välj knappen Flytta.

Skärmbild av Azure Portal som visar knappen Flytta med tre alternativ.

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.

Skärmbild av Azure Portal där användaren anger målresursgruppen för flyttåtgärden.

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

Skärmbild av Azure Portal som visar valideringsprocessen för flyttåtgärden.

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.

Skärmbild av Azure Portal där användaren bekräftar behovet av att uppdatera verktyg och skript innan flyttåtgärden påbörjas.

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

Skärmbild av Azure Portal som visar ett meddelande med resultatet av flyttåtgärden.

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 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 lyckas visas inga utdata. Men om verifieringen misslyckas visas ett felmeddelande som förklarar 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 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 lyckas visas inga utdata. Men om verifieringen misslyckas visas ett felmeddelande som förklarar 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

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.

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 finns kvar i källresursgruppen.

Vilka konsekvenser får det om käll- och målresursgrupperna är låsta under resursflytten?

Låset hindrar dig från att ta bort någon av resursgrupperna. För det andra hindrar låset dig från att skapa en ny resurs, ta bort en resurs eller uppdatera en resurss egenskaper (till exempel ändra storleken på en virtuell dator).

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.

Skärmbild av Azure Portal som visar ett felmeddelande när du försöker ta bort en resursgrupp som är involverad i en pågående flyttåtgärd.

I avbildningen nedan tillhör den virtuella datorresursen en resursgrupp ("TestB") som för närvarande genomgår en flyttåtgärd. När en användare försöker uppdatera en egenskap för den virtuella datorn, till exempel dess storlek, returnerar Azure Portal ett felmeddelande. Detta beror på att resursgruppen är låst under flytten, vilket förhindrar ändringar i dess resurser.

Skärmbild av Azure Portal som visar ett felmeddelande när en användare försöker uppdatera en egenskap (VM-storlek) för den virtuella datorn.

Under en resursflytt kan varken källan eller målresursgruppen delta i andra flyttåtgärder samtidigt. Om resurser till exempel flyttas från resursgrupp A till resursgrupp B kan varken grupp A eller grupp B delta i en annan flyttåtgärd, till exempel att flytta resurser till eller från resursgrupp C, samtidigt. Den här begränsningen säkerställer att resursgrupper inte låses av flera motstridiga åtgärder under flyttprocessen.

Vad betyder felkoden "MissingMoveDependentResources"?

När du flyttar en resurs måste dess beroende resurser antingen finnas i målresursgruppen, i prenumerationen eller ingå 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. Den kan inte flyttas separat.

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

Varför kan jag inte flytta vissa resurser i Azure?

Inte alla resurser i Azure kan flyttas för närvarande. En lista över vilka resurser som kan flyttas finns i Resurser som kan flyttas.

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.

Vad innebär felet om att en resurs inte har statusen för slutfört läge?

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. Felkoden är vanligtvis 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 resurserna till en resursgrupp som inte har ett virtuellt nätverk, eller kontakta support.

Kan jag flytta en resursgrupp till en annan prenumeration?

Nej, du kan inte flytta en resursgrupp till en ny prenumeration. Däremot kan du flytta alla resurser i resursgruppen till en resursgrupp i en annan prenumeration. Inställningar som taggar, rolltilldelningar och principer överförs inte automatiskt från den ursprungliga resursgruppen till målresursgruppen. Du måste ange dessa inställningar på nytt för den nya resursgruppen. Mer information finns i Flytta resurser till en ny resursgrupp eller prenumeration.

Nästa steg

En lista över vilka resurser som kan flyttas finns i Resurser som kan flyttas.