Dela via


Flytta Azure-resurser till en ny resursgrupp eller prenumeration

Den här artikeln beskriver hur du flyttar Azure-resurser mellan resursgrupper inom 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 använda verktyg som Azure Portal, Azure PowerShell, Azure CLI, REST API eller Python för att flytta resurserna.

Under flyttåtgärden är både käll- och målresursgrupperna låsta. Du kan inte 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 från en resursgrupp till en annan kan du inte ta bort den eller ändra dess egenskaper (till exempel dess storlek) under flytten. Trots den här begränsningen fortsätter den virtuella datorn att fungera normalt, och tjänster som förlitar sig på den upplever ingen avbrottstid. Låset kan ta upp till fyra timmar. De flesta flyttningar 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 med sina överordnade resurser, men de kan inte flyttas oberoende av varandra. Du kan till exempel flytta en överordnad resurs som Microsoft.Compute/virtualMachines, och dess underordnade resurs, Microsoft.Compute/virtualMachines/extensions till exempel flyttar med den. Du kan dock inte flytta den underordnade resursen på egen hand.

När du flyttar en resurs bevaras dess beroenden med underordnade resurser, men beroenden med andra resurser kan brytas och kan behöva konfigureras igen. Om du flyttar en resurs ändras endast dess associerade resursgrupp och ändrar inte resursens fysiska region.

Kommentar

Azure-resurser kan inte flyttas om det finns ett skrivskyddat lås på källan, 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 ändrar du det värdet. Om du till exempel har en anpassad instrumentpanel i portalen som refererar till ett resurs-ID uppdaterar du 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 föregår flytt av en resurs. Du kan undvika fel om du verifierar dessa villkor.

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

  2. Käll- och målprenumerationer måste finnas inom samma Microsoft Entra-klientorganisation. Använd Azure CLI eller PowerShell för att kontrollera att båda prenumerationerna har samma klientorganisations-ID.

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

    Om klientorganisations-ID:t för käll- och målprenumerationerna inte matchar använder du följande metoder för att stämma av dem:

  3. Information om hur du flyttar resurser till eller från en Molnlösningsleverantör partner (CSP) finns i Ö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åtgärder finns i Azure-resurstyper för flyttåtgärder.

  5. Vissa tjänster har specifika begränsningar eller krav när resurser flyttas. Kontrollera följande flyttvägledning innan du flyttar resurser inom dessa tjänster:

  1. Målprenumerationen måste registreras för resursprovidern för den resurs som du flyttar. Om det inte är det får du ett felmeddelande om att prenumerationen inte är registrerad för en resurstyp. Du kan se det här felet när du flyttar en resurs till en ny prenumeration, men du använde inte resurstypen tidigare i prenumerationen.

    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
    
  2. Innan du påbörjar en flyttåtgärd kontrollerar du prenumerationskvoten för den prenumeration som du flyttar resurser till. Kontrollera om du kan begära en ökning av en kvot som skulle göra att en målprenumeration överskrider gränsen. Detaljerad vägledning om gränser och hur du begär en ökning finns i Azure-prenumerations- och tjänstgränser, kvoter och begränsningar.

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

    • I källresursgruppen: Microsoft.Resources/subscriptions/resourceGroups/moveResources/action
    • I målresursgruppen: Microsoft.Resources/subscriptions/resourceGroups/write
  4. Om du flyttar en resurs med en aktiv Azure-rolltilldelning (eller dess underordnade resurs med samma tilldelning) flyttas inte rolltilldelningen och blir överbliven. Du måste skapa rolltilldelningen igen efter flytten. Även om systemet automatiskt tar bort den överblivna rolltilldelningen rekommenderar vi att du tar bort den före flytten.

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

  5. Om flytten går mellan olika prenumerationer måste resursen och dess beroende resurser finnas i samma resursgrupp, och de måste flyttas tillsammans. En virtuell dator med hanterade diskar kräver till exempel att du flyttar den virtuella datorn, hanterade diskar och andra beroende resurser tillsammans.

    Om du flyttar en resurs till en ny prenumeration kontrollerar du om resursen har några beroende resurser och om de finns i samma resursgrupp. Om resurserna inte finns i samma resursgrupp kontrollerar du om du kan kombinera dem till samma resursgrupp. Om du kan kan du använda en flyttåtgärd mellan resursgrupper för att konsolidera alla resurser till samma resursgrupp.

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

Scenario för flytt mellan prenumerationer

Att flytta resurser från en prenumeration till en annan är en process i tre steg. För att illustrera de här stegen visar följande diagram endast en beroende resurs:

Diagram som visar trestegsprocessen för att flytta resurser mellan prenumerationer.

  • 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 Azure Portal

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

  2. Välj de resurser 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.

  3. Välj knappen Flytta.

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

    Den här knappen ger dig tre alternativ:

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

  2. Källresursgruppen anges automatiskt. Ange målresursgruppen. Om du flyttar till en ny prenumeration anger du det här alternativet. Välj Nästa.

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

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

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

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

  1. Azure Portal meddelar dig när flytten är klar.

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 faktiskt flytta resurser i realtid använder du az resource invoke-action kommandot . Använd endast det här kommandot när du behöver modellera resultatet utan att följa upp det. Om du vill köra den här åtgärden behöver du resurs-ID:t för källresursgruppen, målresursgruppen och varje resurs som du flyttar.

Använd \" för att undvika dubbla citattecken i brödtexten i begäran.

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 verifieringen misslyckas visas ett felmeddelande som förklarar varför du inte kan flytta resurserna.

Flytta

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

Följande kommandon visar hur du flyttar flera resurser till en ny resursgrupp. De arbetar med Azure CLI i en Bash-terminal eller i en Azure PowerShell-konsol. Om du vill flytta resurser till en ny prenumeration anger du parametern --destination-subscription-id .

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

Använda Azure PowerShell

Validera

Om du vill testa ditt flyttscenario utan att faktiskt flytta resurser i realtid använder du Invoke-AzResourceAction kommandot i Azure PowerShell. Använd endast det här kommandot när du behöver modellera resultatet utan att följa upp det.

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

Utdata visas inte om valideringen lyckas. Men om verifieringen misslyckas förklarar ett felmeddelande varför du inte kan flytta resurserna.

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 faktiskt flytta resurser i realtid använder du ResourceManagementClient.resources.begin_validate_move_resources metoden . Använd endast den här metoden när du behöver modellera resultatet utan att följa upp.

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

Utdata visas inte om valideringen lyckas. Men om verifieringen misslyckas förklarar ett felmeddelande varför du inte kan flytta resurserna.

Flytta

Om du vill flytta befintliga resurser till en annan resursgrupp eller prenumeration använder du ResourceManagementClient.resources.begin_move_resources metoden i Python. 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

Åtgärden validate move operation testar ditt flyttscenario utan att faktiskt flytta resurser. Använd den här åtgärden för att kontrollera om flytten kan lyckas. Verifiering anropas automatiskt när du skickar en flyttbegäran. Använd endast den här åtgärden när du behöver modellera resultatet utan att följa upp. 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
...

En statuskod från 202 anger att valideringsbegäran godkändes, men den 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>

Du fortsätter att få statuskoden 202 medan åtgärden körs. Vänta det antal sekunder som anges i värdet retry-after innan du försöker igen. Du får statuskoden 204 om flyttverifieringen lyckas. Om flyttverifieringen misslyckas får du ett felmeddelande som liknar:

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

Flytta

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

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

Ange den resursgrupp och de resurser som ska flyttas i brödtexten i begäran.

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

Vanliga frågor och svar

Min resursflytt som vanligtvis tar några minuter körs i nästan en timme. Är något fel?

Att flytta en resurs är en komplex åtgärd med olika faser. Det kan handla om mer än bara resursprovidern av den resurs du försöker flytta. Med Azure Resource Manager kan en flyttåtgärd fyra timmar slutföras på grund av beroendena mellan resursprovidrar. Den här varaktigheten ger dem tid att återställa från tillfälliga problem. Om din flyttbegäran är inom fyratimmarsperioden försöker åtgärden slutföras och kan lyckas. Åtgärden låser käll- och målresursgrupperna under den här tiden för att undvika konsekvensproblem.

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

  • Flyttåtgärder tillåts fyra timmar att slutföra. Åtgärden låser käll- och målresursgrupperna under den här tiden för att förhindra att de ändras.

  • En flyttbegäran består av två faser. Resurser flyttas under den första fasen och resursprovidrar som är beroende av de resurser som flyttas meddelas under den andra fasen. En resursgrupp kan låsas i alla fyra timmar när en resursprovider misslyckas i endera fasen. Resource Manager initierar eventuella misslyckade steg under flyttåtgärdens intervall.

  • Resource Manager låser upp båda resursgrupperna om en resurs inte flyttas inom fyra timmar. Resurser som flyttas finns i målresursgruppen. Resurser som inte kan 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. Låset hindrar dig också från att skapa en ny resurs, ta bort en resurs eller uppdatera en resurs egenskaper inom varje resursgrupp (till exempel ändra storlek på en virtuell dator).

Följande bild visar ett felmeddelande från Azure Portal när du 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 föregående bild tillhör den virtuella datorresursen en resursgrupp ("TestB") som för närvarande genomgår en flyttåtgärd. När du försöker uppdatera en virtuell dators egenskap (till exempel dess storlek) returnerar Azure Portal ett felmeddelande. Det här felet beror på att resursgruppen är låst under flytten, vilket skyddar dess resurser från att ändras.

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

Dessutom kan käll- och målresursgrupperna inte delta i andra flyttåtgärder samtidigt under en resursflytt. Om du till exempel flyttar resurser från resursgrupp A till resursgrupp B kan både resursgrupp A och resursgrupp B inte delta i en annan flyttåtgärd samtidigt. Du kan inte samtidigt flytta resurser till eller från resursgrupp C. Den här begränsningen förhindrar att flera motstridiga åtgärder låser resursgrupper under flyttprocessen.

Vad betyder felkoden "MissingMoveDependentResources"?

När du flyttar en resurs måste dess beroende resurser finnas i målresursgruppen eller prenumerationen eller inkluderas i flyttbegäran. Du får felkoden MissingMoveDependentResources när en beroende resurs inte uppfyller detta krav. Felmeddelandet innehåller information om den beroende resurs som du behöver inkludera 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 där du kan behöva flytta flera andra resurser som är associerade med det virtuella nätverket. Flyttbegäran kan kräva flytt av offentliga IP-adresser, routningstabeller, virtuella nätverksgatewayer, nätverkssäkerhetsgrupper och andra resurser. En virtuell nätverksgateway bör finnas i samma resursgrupp som det virtuella nätverket eftersom de inte kan flyttas separat.

Vad betyder felkoden "RequestDisallowedByPolicy"?

Resource Manager validerar din flyttbegäran innan du försöker flytta. Den här valideringen omfattar kontrollprinciper som definierats för de resurser som ingår i flytten. Verifieringen misslyckas till exempel när du försöker flytta ett nyckelvalv, men din organisation har en princip för att neka skapandet av ett nyckelvalv i målresursgruppen. 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?

Alla Azure-resurser tillåter inte flyttåtgärder.

Hur många resurser kan jag flytta i en åtgärd?

Separera stora rörelser i olika flyttåtgärder när det är möjligt. Resource Manager returnerar omedelbart ett fel när det finns fler än 800 resurser i en enda åtgärd. Att flytta färre än 800 resurser kan dock också misslyckas genom att tidsgränsen överskrids.

Vad är innebörden av felet att en resurs inte är i ett "lyckades"-tillstånd?

När du får ett felmeddelande som anger att du inte kan flytta en resurs eftersom den inte är i tillståndet Lyckades kan det bero på att en beroende resurs blockerar flytten. Felkoden är vanligtvis MoveCannotProceedWithResourcesNotInSucceededState.

Om käll- eller målresursgruppen innehåller ett virtuellt nätverk kontrolleras tillstånden för alla resurser som är beroende av det virtuella nätverket under flytten. Den här kontrollen omfattar resurser som är direkt och indirekt beroende av nätverket. Flytten blockeras om några resurser inte är i ett lyckat tillstånd. Om en virtuell dator till exempel använder ett virtuellt nätverk som inte rapporterar ett tillståndet lyckades blockeras flytten. Flytten blockeras även när den virtuella datorn inte är en av de resurser som flyttas. Flytten blockeras även när den virtuella datorn inte finns i käll- eller målresursgruppen.

Lös problemet genom att flytta dina resurser till en resursgrupp som inte har något virtuellt nätverk eller kontakta supporten.

Kan jag flytta en resursgrupp till en annan prenumeration?

Nej, du kan inte flytta en resursgrupp till en ny prenumeration. Men du kan flytta alla resurser i en resursgrupp 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 tillämpa de här inställningarna manuellt på den nya resursgruppen.

Nästa steg

Information om vilka Azure-resurser som stöder flyttåtgärder finns i Stöd för flyttåtgärder för resurser.