Przenoszenie zasobów do nowej grupy zasobów lub subskrypcji

W tym artykule pokazano, jak przenieść zasoby platformy Azure do innej subskrypcji platformy Azure lub innej grupy zasobów w ramach tej samej subskrypcji. Do przenoszenia zasobów możesz użyć witryny Azure Portal, programu Azure PowerShell, interfejsu wiersza polecenia platformy Azure lub interfejsu API REST.

Zarówno grupa źródłowa, jak i docelowa są blokowane na czas operacji przenoszenia. Operacje zapisu i usuwania na grupach zasobów są blokowane do momentu zakończenia przenoszenia. Ta blokada oznacza, że nie można dodawać, aktualizować ani usuwać zasobów w grupach zasobów. Nie oznacza to, że zasoby są zablokowane. Jeśli na przykład przeniesiesz serwer logiczny usługi Azure SQL, jego bazy danych i inne zasoby zależne do nowej grupy zasobów lub subskrypcji, aplikacje, które korzystają z tych baz danych, nie będą mieć przestoju. Nadal mogą odczytywać i zapisywać w bazach danych. Blokada może trwać maksymalnie cztery godziny, ale większość przenosi się w znacznie krótszym czasie.

Jeśli przeniesienie wymaga skonfigurowania nowych zasobów zależnych, wystąpi przerwa w działaniu tych usług do czasu ich ponownego skonfigurowania.

Przeniesienie zasobu powoduje jedynie przeniesienie go do nowej grupy zasobów lub subskrypcji. Operacja nie może zmienić lokalizacji zasobu.

Zmieniono identyfikator zasobu

Podczas przenoszenia zasobu zmieniasz jego identyfikator zasobu. Standardowy format identyfikatora zasobu to /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} . Podczas przenoszenia zasobu do nowej grupy zasobów lub subskrypcji należy zmienić co najmniej jedną wartość w tej ścieżce.

Jeśli używasz identyfikatora zasobu w dowolnym miejscu, musisz zmienić wartość. Jeśli na przykład w portalu masz niestandardowy pulpit nawigacyjny, który odwołuje się do identyfikatora zasobu, musisz zaktualizować tę wartość. Poszukaj skryptów lub szablonów, które należy zaktualizować dla nowego identyfikatora zasobu.

Sporządzenie listy kontrolnej przed przeniesieniem zasobów

Przed przeniesieniem zasobu należy wykonać kilka ważnych czynności. Dzięki sprawdzeniu tych warunków można uniknąć błędów.

  1. Zasoby, które chcesz przenieść, muszą obsługiwać operację przenoszenia. Aby uzyskać listę zasobów, które obsługują przenoszenie, zobacz Obsługa operacji przenoszenia dla zasobów.

  2. Niektóre usługi mają określone ograniczenia lub wymagania dotyczące przenoszenia zasobów. Jeśli przenosisz dowolną z następujących usług, przed przeniesieniem sprawdź te wskazówki.

  3. Jeśli przeniesiesz zasób, który ma rolę platformy Azure przypisaną bezpośrednio do zasobu (lub zasobu podrzędnego), przypisanie roli nie zostanie przeniesione i zostanie oddzielone. Po zakończeniu przenoszenia należy ponownie utworzyć przypisanie roli. Po pewnym czasie oddzielone przypisanie roli zostanie automatycznie usunięte, ale zalecamy usunięcie przypisania roli przed przeniesieniem.

    Aby uzyskać informacje na temat zarządzania przypisaniami ról, zobacz List Azure role assignments (Wyświetlanie listy przypisań ról platformy Azure) i Assign Azure roles (Przypisywanie ról platformy Azure).

  4. Subskrypcja źródłowa i docelowa musi być aktywna. Jeśli masz problem z włączeniem wyłączonego konta, utwórz wniosek o pomoc techniczną platformy Azure. Wybierz pozycję Zarządzanie subskrypcjami jako typ problemu.

  5. Subskrypcje źródłowe i docelowe muszą istnieć w tej samej Azure Active Directory dzierżawie. Aby sprawdzić, czy obie subskrypcje mają ten sam identyfikator dzierżawy, użyj Azure PowerShell wiersza polecenia platformy Azure.

    Na Azure PowerShell użyj:

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

    W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:

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

    Jeśli identyfikatory dzierżawy dla subskrypcji źródłowej i docelowej nie są takie same, użyj następujących metod, aby uzgodnić identyfikatory dzierżaw:

  6. Subskrypcja docelowa musi być zarejestrowana dla dostawcy przenoszonego zasobu. Jeśli nie, zostanie wyświetlony komunikat o błędzie informujący, że subskrypcja nie jest zarejestrowana dla typu zasobu. Ten błąd może wystąpić podczas przenoszenia zasobu do nowej subskrypcji, ale ta subskrypcja nigdy nie była używana z tym typem zasobu.

    W przypadku programu PowerShell użyj następujących poleceń, aby uzyskać stan rejestracji:

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

    Aby zarejestrować dostawcę zasobów, użyj:

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

    W przypadku interfejsu wiersza polecenia platformy Azure użyj następujących poleceń, aby uzyskać stan rejestracji:

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

    Aby zarejestrować dostawcę zasobów, użyj:

    az provider register --namespace Microsoft.Batch
    
  7. Konto przenoszące zasoby musi mieć co najmniej następujące uprawnienia:

    • Microsoft.Resources/subscriptions/resourceGroups/moveResources/action w źródłowej grupie zasobów.
    • Microsoft.Resources/subscriptions/resourceGroups/write w docelowej grupie zasobów.
  8. Przed przeniesieniem zasobów sprawdź limity przydziału subskrypcji, do których są przenoszące zasoby. Jeśli przeniesienie zasobów oznacza, że subskrypcja przekroczy limity, musisz sprawdzić, czy możesz zażądać zwiększenia limitu przydziału. Aby uzyskać listę limitów i sposób żądania zwiększenia, zobacz Azure subscription and service limits, quotas, and constraints(Limity, przydziały i ograniczenia usługi i subskrypcji platformy Azure).

  9. W przypadku przenoszenia między subskrypcjami zasób i jego zasoby zależne muszą znajdować się w tej samej grupie zasobów i muszą być przenoszone razem. Na przykład maszyna wirtualna z dyskami zarządzanymi wymagałaby, aby maszyna wirtualna i dyski zarządzane zostały przeniesione razem wraz z innymi zasobami zależnym.

    Jeśli przenosisz zasób do nowej subskrypcji, sprawdź, czy zasób ma jakiekolwiek zasoby zależne i czy znajduje się w tej samej grupie zasobów. Jeśli zasoby nie są w tej samej grupie zasobów, sprawdź, czy zasoby można połączyć w tę samą grupę zasobów. Jeśli tak, przenieś wszystkie te zasoby do tej samej grupy zasobów przy użyciu operacji przenoszenia między grupami zasobów.

    Aby uzyskać więcej informacji, zobacz Scenariusz przenoszenia między subskrypcjami.

Scenariusz przenoszenia między subskrypcjami

Przenoszenie zasobów z jednej subskrypcji do innej jest procesem trzyetapowym:

scenariusz przenoszenia między subskrypcjami

Dla celów ilustratora mamy tylko jeden zasób zależny.

  • Krok 1. Jeśli zasoby zależne są rozproszone w różnych grupach zasobów, najpierw przenieś je do jednej grupy zasobów.
  • Krok 2. Przeniesienie zasobu i zasobów zależnych z subskrypcji źródłowej do subskrypcji docelowej.
  • Krok 3. Opcjonalnie możesz ponownie rozesłać zasoby zależne do różnych grup zasobów w ramach subskrypcji docelowej.

Używanie portalu

Aby przenieść zasoby, wybierz grupę zasobów zawierającą te zasoby.

Wybierz zasoby, które chcesz przenieść. Aby przenieść wszystkie zasoby, zaznacz pole wyboru w górnej części listy. Możesz też wybrać zasoby pojedynczo.

wybieranie zasobów

Wybierz przycisk Przenieś.

opcje przenoszenia

Ten przycisk udostępnia trzy opcje:

Wybierz, czy przenosisz zasoby do nowej grupy zasobów, czy nowej subskrypcji.

Źródłową grupę zasobów ustawia się automatycznie. Określ docelową grupę zasobów. Jeśli przenosisz się do nowej subskrypcji, określ również subskrypcję. Wybierz opcję Dalej.

wybieranie docelowej grupy zasobów

Portal sprawdza, czy zasoby można przenieść. Poczekaj na zakończenie walidacji.

Przenoszenie walidacji

Po pomyślnym zakończeniu walidacji wybierz pozycję Dalej.

Należy potwierdzić, że musisz zaktualizować narzędzia i skrypty dla tych zasobów. Aby rozpocząć przenoszenie zasobów, wybierz pozycję Przenieś.

wybieranie miejsca docelowego

Po zakończeniu przenoszenia zostaniesz powiadomiony o wyniku.

wyświetlanie wyników przenoszenia

Korzystanie z programu Azure PowerShell

Walidacja

Aby przetestować scenariusz przenoszenia bez konieczności przenoszenia zasobów, użyj polecenia Invoke-AzResourceAction. Użyj tego polecenia tylko wtedy, gdy trzeba wstępnie określonej wyników. Do uruchomienia tej operacji potrzebne są:

  • Identyfikator zasobu źródłowej grupy zasobów
  • Identyfikator zasobu docelowej grupy zasobów
  • Identyfikator zasobu każdego zasobu do przeniesienia
Invoke-AzResourceAction -Action validateMoveResources `
-ResourceId "/subscriptions/{subscription-id}/resourceGroups/{source-rg}" `
-Parameters @{ resources= @("/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}", "/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}", "/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}");targetResourceGroup = '/subscriptions/{subscription-id}/resourceGroups/{destination-rg}' }  

Jeśli walidacja przebiegnie pomyślnie, nie zobaczysz żadnych danych wyjściowych.

Jeśli walidacja zakończy się niepowodzeniem, zostanie wyświetlony komunikat o błędzie z opisem, dlaczego nie można przenieść zasobów.

Move

Aby przenieść istniejące zasoby do innej grupy zasobów lub subskrypcji, użyj polecenia Move-AzResource. W poniższym przykładzie pokazano, jak przenieść kilka zasobów do nowej grupy zasobów.

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

Aby przejść do nowej subskrypcji, dołącz wartość DestinationSubscriptionId parametru .

Interfejs wiersza polecenia platformy Azure

Walidacja

Aby przetestować scenariusz przenoszenia bez przenoszenia zasobów, użyj polecenia az resource invoke-action. Użyj tego polecenia tylko wtedy, gdy trzeba wstępnie określonej wyników. Do uruchomienia tej operacji potrzebne są:

  • Identyfikator zasobu źródłowej grupy zasobów
  • Identyfikator zasobu docelowej grupy zasobów
  • Identyfikator zasobu każdego zasobu do przeniesienia

W treści żądania użyj , aby uniknąć \" podwójnego cudzysłowu.

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

Jeśli walidacja przebiegnie pomyślnie, zobaczysz:

{} Finished .. 

Jeśli walidacja zakończy się niepowodzeniem, zostanie wyświetlony komunikat o błędzie z opisem, dlaczego nie można przenieść zasobów.

Move

Aby przenieść istniejące zasoby do innej grupy zasobów lub subskrypcji, użyj polecenia az resource move. Podaj identyfikatory zasobów do przeniesienia. W poniższym przykładzie pokazano, jak przenieść kilka zasobów do nowej grupy zasobów. W --ids parametrze podaj rozdzielaną spacjami listę identyfikatorów zasobów do przeniesienia.

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

Aby przejść do nowej subskrypcji, podaj --destination-subscription-id parametr .

Korzystanie z interfejsu API REST

Walidacja

Operacja weryfikacji przenoszenia umożliwia przetestowanie scenariusza przenoszenia bez konieczności przenoszenia zasobów. Użyj tej operacji, aby sprawdzić, czy przenoszenie zakończy się pomyślnie. Walidacja jest wywoływana automatycznie podczas wysyłania żądania przeniesienia. Tej operacji należy używać tylko wtedy, gdy trzeba wstępnie ująć wyniki. Do uruchomienia tej operacji potrzebne są:

  • Nazwa źródłowej grupy zasobów
  • Identyfikator zasobu docelowej grupy zasobów
  • Identyfikator zasobu każdego zasobu do przeniesienia
  • Token dostępu dla Twojego konta

Wyślij następujące żądanie:

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

Z treścią żądania:

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

Jeśli żądanie jest poprawnie sformatowane, operacja zwraca:

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

Kod stanu 202 wskazuje, że żądanie weryfikacji zostało zaakceptowane, ale nie zostało jeszcze określone, czy operacja przenoszenia zakończy się pomyślnie. Wartość zawiera adres URL, który umożliwia sprawdzenie location stanu długotrwałej operacji.

Aby sprawdzić stan, wyślij następujące żądanie:

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

Gdy operacja jest nadal uruchomiona, nadal otrzymujesz kod stanu 202. Przed podjęciem próby odczekaj liczbę sekund wskazaną w retry-after wartości. Jeśli operacja przenoszenia zostanie pomyślnie zweryfikowana, otrzymasz kod stanu 204. Jeśli weryfikacja przenoszenia zakończy się niepowodzeniem, zostanie wyświetlony komunikat o błędzie, taki jak:

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

Move

Aby przenieść istniejące zasoby do innej grupy zasobów lub subskrypcji, użyj operacji Przenieś zasoby.

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

W treści żądania należy określić docelową grupę zasobów i zasoby do przeniesienia.

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

Często zadawane pytania

Pytanie: Moja operacja przenoszenia zasobu, która zwykle trwa kilka minut, jest uruchomiona przez prawie godzinę. Czy coś jest nie tak?

Przenoszenie zasobu jest złożoną operacją, która ma różne fazy. Może to obejmować nie tylko dostawcę zasobów zasobu, który próbujesz przenieść. Ze względu na zależności między dostawcami zasobów Azure Resource Manager 4 godziny na ukończenie operacji. Ten okres daje dostawcom zasobów możliwość odzyskania po przejściowych problemach. Jeśli żądanie przeniesienia znajduje się w ciągu czterech godzin, operacja będzie się powtarzać i może się powieść. Źródłowe i docelowe grupy zasobów są w tym czasie zablokowane, aby uniknąć problemów ze spójnością.

Pytanie: Dlaczego moja grupa zasobów jest zablokowana na cztery godziny podczas przenoszenia zasobów?

Żądanie przeniesienia może zakończyć się maksymalnie przez cztery godziny. Aby zapobiec modyfikowaniu przenoszonego zasobu, podczas przenoszenia zasobów zarówno źródłową, jak i docelową grupę zasobów są blokowane.

Żądanie przeniesienia ma dwie fazy. W pierwszej fazie zasób jest przenoszony. W drugiej fazie powiadomienia są wysyłane do innych dostawców zasobów, którzy są zależni od przenoszonego zasobu. Grupę zasobów można zablokować na całe cztery godziny, gdy dostawca zasobów zakończy się niepowodzeniem w jednej z faz. W dozwolonym czasie Resource Manager ponowne próby kroku, który zakończył się niepowodzeniem.

Jeśli zasobu nie można przenieść w ciągu czterech godzin, Resource Manager obie grupy zasobów. Zasoby, które zostały pomyślnie przeniesione, znajdują się w docelowej grupie zasobów. Zasoby, których nie można przenieść, zostaną pozostawione w źródłowej grupie zasobów.

Pytanie: Jakie są implikacje zablokowania źródłowej i docelowej grupy zasobów podczas przenoszenia zasobu?

Blokada uniemożliwia usunięcie dowolnej grupy zasobów, utworzenie nowego zasobu w grupie zasobów lub usunięcie wszystkich zasobów uczestniczących w przenoszeniu.

Na poniższej ilustracji przedstawiono komunikat o błędzie z Azure Portal gdy użytkownik próbuje usunąć grupę zasobów, która jest częścią trwającego przenoszenia.

Przenoszenie komunikatu o błędzie podczas próby usunięcia

Pytanie: Co oznacza kod błędu "MissingMoveDependentResources"?

Podczas przenoszenia zasobu zasoby zależne muszą istnieć w docelowej grupie zasobów lub subskrypcji albo muszą zostać dołączone do żądania przeniesienia. Kod błędu MissingMoveDependentResources jest wyświetlany, gdy zasób zależny nie spełnia tego wymagania. Komunikat o błędzie zawiera szczegółowe informacje o zasobie zależnym, który musi zostać uwzględniony w żądaniu przeniesienia.

Na przykład przeniesienie maszyny wirtualnej może wymagać przenoszenia siedmiu typów zasobów z trzema różnymi dostawcami zasobów. Ci dostawcy zasobów i typy to:

  • Microsoft.Compute

    • virtualMachines
    • Dysków
  • Microsoft.Network

    • networkInterfaces
    • publicIPAddresses
    • networkSecurityGroups
    • virtualNetworks
  • Microsoft.Storage

    • konta magazynu

Innym powszechnym przykładem jest przeniesienie sieci wirtualnej. Może być trzeba przenieść kilka innych zasobów skojarzonych z tą siecią wirtualną. Żądanie przeniesienia może wymagać przeniesienia publicznych adresów IP, tabel tras, bram sieci wirtualnej, sieciowych grup zabezpieczeń i innych.

Pytanie: Co oznacza kod błędu "RequestDisallowedByPolicy"?

Resource Manager sprawdza poprawność żądania przeniesienia przed podjęciem próby przeniesienia. Ta walidacja obejmuje sprawdzanie zasad zdefiniowanych dla zasobów uczestniczących w przenoszeniu. Jeśli na przykład próbujesz przenieść magazyn kluczy, ale Twoja organizacja ma zasady odmawiające utworzenia magazynu kluczy w docelowej grupie zasobów, walidacja kończy się niepowodzeniem i przenoszenie jest blokowane. Zwrócony kod błędu to RequestDisallowedByPolicy.

Aby uzyskać więcej informacji na temat zasad, zobacz Co to jest Azure Policy?.

Pytanie: Dlaczego nie mogę przenieść niektórych zasobów na platformę Azure?

Obecnie nie wszystkie zasoby na platformie Azure obsługują przenoszenie. Aby uzyskać listę zasobów, które obsługują przenoszenie, zobacz Obsługa operacji przenoszenia dla zasobów.

Pytanie: Ile zasobów można przenieść w ramach jednej operacji?

Jeśli to możliwe, należy dzielić duże operacje przenoszenia na oddzielne operacje przenoszenia. Resource Manager natychmiast zwraca błąd, gdy w jednej operacji znajduje się więcej niż 800 zasobów. Jednak przekierowanie mniej niż 800 zasobów może również się nie powieść, ponieważ przekieruje limit czasu.

Pytanie: Jakie jest znaczenie błędu, że zasób nie jest w stanie sukcesu?

Gdy zostanie wyświetlony komunikat o błędzie informujący, że nie można przenieść zasobu, ponieważ nie jest on w stanie sukcesu, może to być zasób zależny, który blokuje przeniesienie. Zazwyczaj kod błędu to MoveCannotProceedWithResourcesNotInSucceededState.

Jeśli źródło lub docelowa grupa zasobów zawiera sieć wirtualną, podczas przenoszenia sprawdzane są stany wszystkich zasobów zależnych dla sieci wirtualnej. Sprawdzanie obejmuje te zasoby bezpośrednio i pośrednio zależne od sieci wirtualnej. Jeśli którykolwiek z tych zasobów jest w stanie awarii, przeniesienie zostanie zablokowane. Na przykład jeśli maszyna wirtualna, która korzysta z sieci wirtualnej, nie powiodła się, przeniesienie zostanie zablokowane. Przenoszenie jest blokowane nawet wtedy, gdy maszyna wirtualna nie jest jednym z przenoszonego zasobu i nie znajduje się w jednej z grup zasobów dla przeniesienia.

Po otrzymaniu tego błędu masz dwie opcje. Przenieś zasoby do grupy zasobów, która nie ma sieci wirtualnej, lub skontaktuj się z pomocą techniczną.

Następne kroki

Aby uzyskać listę zasobów, które obsługują przenoszenie, zobacz Obsługa operacji przenoszenia dla zasobów.