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.
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.
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:
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.
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.
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:
- Om du använder Azure Stack Hub kan du inte flytta resurser mellan grupper.
- Azure App Services
- Azure DevOps Services
- Klassisk distributionsmodell för klassisk beräkning, lagring, virtuella nätverk och molntjänster
- Cloud Services (utökad support)
- Nätverk
- Azure Recovery Services
- Virtuella datorer
- Information om hur du flyttar en Azure-prenumeration till en ny hanteringsgrupp finns i Flytta prenumerationer.
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
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.
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
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.
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:
- 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
Om du vill flytta resurser väljer du den resursgrupp som innehåller dessa resurser.
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.
Välj knappen Flytta.
Den här knappen ger dig tre alternativ:
- Flytta till en ny resursgrupp.
- Flytta till en ny prenumeration.
- Flytta till en ny region. Information om hur du ändrar regioner finns i Flytta resurser mellan regioner (från resursgrupp) med Azure Resource Mover.
Välj om du flyttar resurserna till en ny resursgrupp eller prenumeration.
Källresursgruppen anges automatiskt. Ange målresursgruppen. Om du flyttar till en ny prenumeration anger du det här alternativet. Välj Nästa.
Portalen validerar att resurserna kan flyttas. Vänta tills valideringen har slutförts.
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.
- Azure Portal meddelar dig när flytten är klar.
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:
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.
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.