共用方式為


使用 Azure PowerShell 和 CLI 在可用性區域中移動虛擬機器

本文詳細說明如何使用 Azure PowerShell 和 CLI Cmdlet 將 Azure 單一執行個體 VM 從地區可用性區域移至區域可用性區域。 可用性區域是指 Azure 區域內實際上分隔的區域。 使用可用性區域來保護您的應用程式和資料,以免受到整個資料中心不太可能會發生故障或損失的影響。

若要使用可用性區域,請在支援的 Azure 區域中建立虛擬機器。

必要條件

開始移動程序之前,請先確認下列需求:

需求 描述
訂用帳戶權限 確保您在包含要移動的資源的訂用帳戶上具有擁有者存取權。

受控識別需要下列權限:
- 在使用者訂用帳戶中具有寫入或建立資源的權限 (透過參與者角色來提供)。
- 建立角色指派的權限。 通常會透過擁有者使用者存取系統管理員角色,或透過已指派 Microsoft.Authorization 角色指派或寫入權限的自訂角色來提供。 如果資料共用資源的受控識別已獲得 Azure 資料存放區的存取權,則不需要此權限。
深入了解 Azure 角色。
VM 支援 檢閱受支援的地區。

- 檢查支援的計算儲存體網路設定。
VM 健全狀態 在嘗試進行區域移動之前,您想要移動的 VM 必須處於狀況良好的狀態。 在嘗試進行 VM 區域移動之前,請確保所有擱置中的重新啟動和強制更新都已完成,而且虛擬機器正在運作且處於狀況良好的狀態。

檢閱 PowerShell 和 CLI 需求

無論使用 Azure 入口網站或 PowerShell 還是 CLI,大部分的移動資源作業都是相同的,但有一些例外。

作業 入口網站 PowerShell/CLI
建立移動集合 移動集合 (您要移動的所有地區 VM 的清單) 會自動建立。 入口網站會在後端指派必要的身分識別權限。 您可以使用 PowerShell CmdletCLI Cmdlet 來:
- 將受控識別指派給集合。
- 將地區 VM 新增至集合中。
資源移動作業 驗證步驟並驗證使用者設定變更。 起始移動會啟動移動程序,並在目標區域中建立來源 VM 的複本。 它也會完成新建立的 VM 在目標區域中的移動作業。 使用 PowerShell CmdletCLI Cmdlet 來:
- 將地區 VM 新增至集合中
- 解決相依性問題
- 執行移動作業。
- 提交移動作業。

範例值

我們在我們的指令碼範例中使用這些值:

設定
訂用帳戶識別碼 subscription-id
移動地區 美國東部
資源群組 (保存移動集合的中繼資料) RegionToZone-DemoMCRG
移動集合名稱 RegionToZone-DemoMC
移動集合的位置 eastus2euap
identityType SystemAssigned
VM 名稱 demoVM-MoveResource
移動類型 RegionToZone

登入 Azure

使用 Connect-AzAccount 命令登入 Azure 訂用帳戶並遵循畫面上的指示。

Connect-AzAccount –Subscription "<subscription-id>"

設定移動集合

MoveCollection 物件中儲存了所要移動資源的相關中繼資料和設定資訊。 若要設定移動集合,請執行下列動作:

  • 建立移動集合的資源群組。
  • 註冊訂用帳戶的服務提供者,這樣才能建立 MoveCollection 資源。
  • 透過受控識別建立 MoveCollection 物件。 若要讓 MoveCollection 物件存取 Resource Mover 服務所在的訂用帳戶,需要訂用帳戶所信任的系統指派的受控識別 (前稱為「受控服務識別 (MSI)」)。
  • 授與 Resource Mover 訂用帳戶受控識別存取權。

建立資源群組

使用下列 Cmdlet,以使用 New-AzResourceGroup 為移動集合中繼資料和設定資訊建立資源群組。 資源群組是在其中部署與管理 Azure 資源的邏輯容器。

New-AzResourceGroup -Name "RegionToZone-DemoMCRG" -Location "EastUS"

輸出:

輸出會顯示與 VM 相同的可用性區域中的受控磁碟:

ResourceGroupName : RegionToZone-DemoMCRG
Location          : eastus
ProvisioningState : Succeeded
Tags              :
                    Name     Value
                    =======  ========
                    Created  20230908

ResourceId        : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG

註冊資源提供者

  1. 註冊資源提供者 Microsoft.Migrate,這樣才能建立 MoveCollection 資源,如下所示:

    Register-AzResourceProvider -ProviderNamespace Microsoft.Migrate
    
  2. 等候註冊:

    While(((Get-AzResourceProvider -ProviderNamespace Microsoft.Migrate)| where {$_.RegistrationState -eq "Registered" -and $_.ResourceTypes.ResourceTypeName -eq "moveCollections"}|measure).Count -eq 0)
    {
        Start-Sleep -Seconds 5
        Write-Output "Waiting for registration to complete."
    }
    

建立 MoveCollection 物件

建立 MoveCollection 物件,並將受控識別指派給它,如下所示:

New-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC"  -ResourceGroupName "RegionToZone-DemoMCRG" -MoveRegion "eastus" -Location "eastus2euap" -IdentityType "SystemAssigned" -MoveType "RegionToZone"

輸出:

Etag                                   Location    Name
----                                   --------    ----
"3a00c441-0000-3400-0000-64fac1b30000" eastus2euap RegionToZone-DemoMC

注意

對於地區到區域移動,MoveType 參數應設為 RegionToZone,而 MoveRegion 參數應設為進行區域移動的資源所在的位置。 確保不需要參數 SourceRegionTargetRegion,而且應該設為 null

授與受控識別存取權

授與 Resource Mover 訂用帳戶受控識別存取權,如下所示。 您必須是訂用帳戶擁有者。

  1. 從 MoveCollection 物件擷取身分識別詳細資料。

    $moveCollection = Get-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC" -ResourceGroupName "RegionToZone-DemoMCRG"
    $identityPrincipalId = $moveCollection.IdentityPrincipalId
    
  2. 將必要的角色指派給身分識別,讓 Azure Resource Mover 可存取您的訂用帳戶以協助移動資源。 檢閱移動所需的權限清單。

    New-AzRoleAssignment -ObjectId $identityPrincipalId -RoleDefinitionName Contributor -Scope "/subscriptions/<subscription-id>""
    New-AzRoleAssignment -ObjectId $identityPrincipalId -RoleDefinitionName "User Access Administrator" -Scope "/subscriptions/<subscription-id>"
    

將地區 VM 新增至移動集合中

擷取您要移動之現有來源資源的標識碼。 建立目的地資源設定物件,然後將資源新增至移動集合。

注意

新增至移動集合的資源必須位於相同的訂用帳戶中,但可以位於不同的資源群組中。

  1. 建立目標資源設定物件,如下所示:

    $targetResourceSettingsObj = New-Object Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings
    $targetResourceSettingsObj.ResourceType = "Microsoft.Compute/virtualMachines"
    $targetResourceSettingsObj.TargetResourceName = "RegionToZone-demoTargetVm"
    $targetResourceSettingsObj.TargetAvailabilityZone = "2"
    

    輸出

    ResourceType                      TargetResourceGroupName TargetResourceName        TargetAvailabilitySetId TargetAvailabilityZone TargetVMSize UserManagedIdentity
    ------------                      ----------------------- ------------------        ----------------------- ---------------------- ------------ -------------------
    Microsoft.Compute/virtualMachines                         RegionToZone-demoTargetVm                         2
    
  2. 新增資源

    Add-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -SourceId "/subscriptions/<Subscription-id>/resourcegroups/PS-demo-RegionToZone-RG/providers/Microsoft.Compute/virtualMachines/RegionToZone-demoSourceVm" -Name "demoVM-MoveResource" -ResourceSetting $targetResourceSettingsObj
    

    輸出

    DependsOn                         : {}
    DependsOnOverride                 : {}
    ErrorsPropertiesCode              :
    ErrorsPropertiesDetail            :
    ErrorsPropertiesMessage           :
    ErrorsPropertiesTarget            :
    ExistingTargetId                  :
    Id                                : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/Re
                                        gionToZone-DemoMC/moveResources/demoVM-MoveResource
    IsResolveRequired                 : False
    JobStatusJobName                  :
    JobStatusJobProgress              :
    MoveStatusErrorsPropertiesCode    : DependencyComputationPending
    MoveStatusErrorsPropertiesDetail  : {}
    MoveStatusErrorsPropertiesMessage : The dependency computation is not completed for resource - /subscriptions/<Subscription-id>/resourcegroups/PS-demo-R
                                        egionToZone-RG/providers/Microsoft.Compute/virtualMachines/RegionToZone-demoSourceVm'.
                                            Possible Causes: Dependency computation is pending for resource.
                                            Recommended Action: Validate dependencies to compute the dependencies.
    
    MoveStatusErrorsPropertiesTarget  :
    MoveStatusMoveState               : MovePending
    Name                              : demoVM-MoveResource
    ProvisioningState                 : Succeeded
    ResourceSetting                   : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings
    SourceId                          : /subscriptions/<Subscription-id>/resourcegroups/PS-demo-RegionToZone-RG/providers/Microsoft.Compute/virtualMachines/
                                        RegionToZone-demoSourceVm
    SourceResourceSetting             : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings
    SystemDataCreatedAt               : 9/8/2023 6:48:11 AM
    SystemDataCreatedBy               : xxxxx@microsoft.com
    SystemDataCreatedByType           : User
    SystemDataLastModifiedAt          : 9/8/2023 6:48:11 AM
    SystemDataLastModifiedBy          : xxxxx@microsoft.com
    SystemDataLastModifiedByType      : User
    TargetId                          :
    Type                              :
    

修改設定

您可以在移動 Azure VM 和相關聯的資源時修改目的地設定。 建議您只在驗證移動集合之前變更目的地設定。

您可以修改的設定如下:

  • 虛擬機器設定: 資源群組、VM 名稱、VM 可用性區域、VM SKU、VM 金鑰保存庫和磁碟加密集。
  • 網路資源設定: 對於網路介面、虛擬網路 (VNet/) 和網路安全性群組/網路介面,您可以:
    • 使用目的地區域中的現有網路資源。
    • 使用不同的名稱來建立新資源。
  • 公用 IP/負載平衡器: SKU 和區域

修改設定,如下所示:

  1. 擷取您要編輯屬性的移動資源。 例如,若要擷取 VM 執行:

    $moveResourceObj = Get-AzResourceMoverMoveResource -MoveCollectionName " RegionToZone-DemoMCRG " -ResourceGroupName " RegionToZone-DemoMC " -Name "PSDemoVM"
    
  2. 將資源設定複製到目標資源設定物件。

    $TargetResourceSettingObj = $moveResourceObj.ResourceSetting
    
  3. 在目標資源設定物件中設定參數。 例如,若要變更目的地 VM 的名稱:

    $TargetResourceSettingObj.TargetResourceName="PSDemoVM-target"
    
  4. 更新移動資源目的地設定。 在此範例中,我們會將 VM 的名稱從 PSDemoVM 變更為 PSDemoVMTarget。

    Update-AzResourceMoverMoveResource -ResourceGroupName " RegionToZone-DemoMCRG " -MoveCollectionName " RegionToZone-DemoMC -SourceId "/subscriptions/<Subscription-d>/resourceGroups/PSDemoRM/providers/Microsoft.Compute/virtualMachines/PSDemoVM" -Name "PSDemoVM" -ResourceSetting $TargetResourceSettingObj
    

解決相依性問題

檢查您所新增的地區 VM 是否對其他資源具有任何相依性,並視需要新增。

  1. 解決相依性問題,如下所示:

    Resolve-AzResourceMoverMoveCollectionDependency -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC"
    

    輸出 (相依性存在時)

    AdditionalInfo :
    Code           :
    Detail         :
    EndTime        : 
    EndTime        : 9/8/2023 6:52:14 AM
    
    Id             : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/operations/bc68354b-ec1f-44cb-92ab-fb3b4ad90229
    Message        :
    Name           : bc68354b-ec1f-44cb-92ab-fb3b4ad90229
    Property       : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any
    StartTime      : 9/8/2023 6:51:50 AM
    Status         : Succeeded
    
  2. 若要取得新增至移動集合中的資源清單:

    $list = Get-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" $list.Name
    

    輸出:

    demoVM-MoveResource
    mr_regiontozone-demosourcevm661_d6f18900-3b87-4fb5-9bdf-12da2f9fb185
    mr_regiontozone-demosourcevm-vnet_d8536bf5-2d5f-4778-9650-32d0570bc41a
    mr_regiontozone-demosourcevm-ip_6af03f1f-eae8-4541-83f5-97a2506cfc3e
    mr_regiontozone-demosourcevm-nsg_98d68420-d7ff-4e2d-b758-25a6df80fca7
    mr_nrms-timkbo3hy3nnmregiontozone-demosourcevm-vnet_f474c880-4823-4ed3-b761-96df6500f6a3
    
  3. 若要從資源集合中移除資源,請遵循這些指示

可用性區域 VM SKU、配額和容量驗證

當選取的可用性區域沒有虛擬機器 SKU,或沒有足夠的配額或容量可用時,Azure 會提供建議。 以下是這些建議的一些範例,以及虛擬機器 SKU 無法使用時所應採取的動作。

無法使用 VM SKU

在選取的可用性區域 1 中無法使用來源虛擬機器大小 Standard_DC1ds_v3 時。

建議的動作:在相同的可用性區域中選擇不同的虛擬機器大小,或選取具有對應建議 VM 大小的不同可用性區域。

建議

  • SKU:Standard_DC1ds_v3,區域:[ 2 ]
  • SKU:Standard_DC2ds_v3,區域:[ 2 ]
  • SKU:Standard_DC4ds_v3,區域:[ 2 ]
  • SKU:Standard_DC1s_v3,區域:[ 2 ]
  • SKU:Standard_D2ds_v5,區域:[ 2, 3 ]
  • SKU:Standard_D2as_v4,區域:[ 1, 2, 3 ]
  • SKU:Standard_D2s_v3,區域:[ 1, 2, 3 ]
  • SKU:Standard_D2as_v5,區域:[ 1, 2, 3 ]
  • SKU:Standard_D2s_v5,區域:[ 2, 3 ]

容量建議

所選可用性區域 1 中目前選取虛擬機器大小 Standard_DC1ds_v3 的容量建議。

建議的動作:若要增加成功部署的可能性,Azure 已識別出其他建議的虛擬機器大小和區域。 若要順暢部署,請在相同的可用性區域中選擇不同的 VM 大小,或選取具有對應虛擬機器大小的不同可用性區域。

建議

  • SKU:Standard_DC1ds_v3,區域:[ 2 ]
  • SKU:Standard_DC2ds_v3,區域:[ 2 ]
  • SKU:Standard_DC4ds_v3,區域:[ 2 ]
  • SKU:Standard_DC1s_v3,區域:[ 2 ]
  • SKU:Standard_D2ds_v5,區域:[ 2, 3 ]
  • SKU:Standard_D2as_v4,區域:[ 1, 2, 3 ]
  • SKU:Standard_D2s_v3,區域:[ 1, 2, 3 ]
  • SKU:Standard_D2as_v5,區域:[ 1, 2, 3 ]
  • SKU:Standard_D2s_v5,區域:[ 2, 3 ]

解決建議

若要解決找不到 VM SKU 或發生容量問題的情況,請更新行動資源,然後再次執行解決。 以下是參考的範例:

  1. 根據建議,將虛擬機器移動資源物件更新至新的區域或 SKU。

    $targetResourceSettingsObj.TargetVmSize = "Standard_DC1ds_v3"
    $targetResourceSettingsObj.TargetAvailabilityZone = "3"
    
  2. 更新虛擬機器移動資源

    Add-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -SourceId "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Compute/virtualMachines/vmtwo" -Name "demoVM-MoveResource2" -ResourceSetting $targetResourceSettingsObj
    
  3. 再次執行解析

    Resolve-AzResourceMoverMoveCollectionDependency -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC"

配額不足

由於配額不足,選取的虛擬機器無法移至可用性區域。

建議的動作:找到不足的配額。 請參閱連結並連絡支援人員

起始 VM 資源的移動

Invoke-AzResourceMoverInitiateMove -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -MoveResource $("demoVM-MoveResource") -MoveResourceInputType "MoveResourceId"

輸出

AdditionalInfo :
Code           :
Detail         :
EndTime        : 9/8/2023 7:07:58 AM
Id             : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/o
                 perations/d3e06ac3-a961-4045-8301-aee7f6911160
Message        :
Name           : d3e06ac3-a961-4045-8301-aee7f6911160
Property       : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any
StartTime      : 9/8/2023 7:01:31 AM
Status         : Succeeded

提交

初始移動作業之後,您必須提交移動作業或捨棄它。 提交會完成移至目標地區的作業。

提交移動作業,如下所示:

Invoke-AzResourceMover-VMZonalMoveCommit -ResourceGroupName "RG-MoveCollection-demoRMS" -MoveCollectionName "PS-centralus-westcentralus-demoRMS" -MoveResource $('psdemovm111', 'PSDemoRM-vnet','PSDemoVM-nsg', ‘PSDemoVM’) -MoveResourceInputType "MoveResourceId"

輸出:

AdditionalInfo : 
Code           : 
Detail         : 
EndTime        : 9/22/2023 5:26:55 AM 
Id             : /subscriptions/e80eb9fa-c996-4435-aa32-5af6f3d3077c/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/operations/35dd1d93-ba70-4dc9-a17f-7d8ba48678d8 
Message        : 
Name           : 35dd1d93-ba70-4dc9-a17f-7d8ba48678d8 
Property       : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any 
StartTime      : 9/22/2023 5:26:54 AM 
Status         : Succeeded 

移除資源

您可以使用下列 Cmdlet,從 MoveCollection 中移除單一資源或多個資源:

  1. 取得新增至移動集合的移動資源清單:$list = Get-AzResourceMoverMoveResource -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"

  2. 將您找到的移動資源移除:Invoke-AzResourceMoverBulkRemove -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>" -MoveResource $($list.Name)

  3. 將移動集合移除:Remove-AzResourceMoverMoveCollection -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"

注意

如果您觀察到受控識別授權問題,請再次遵循下列步驟重新啟用受控識別存取。

刪除來源地區 VM

提交移動作業並確認資源在目標地區中如預期般運作之後,您可以使用下列命令來刪除每個來源資源:

下一步

了解如何透過入口網站,將單一執行個體 Azure VM 從地區組態移至區域組態。