Share via


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

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

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

重要

單一執行個體 VM 組態的地區到區域移動目前處於公開預覽階段。

必要條件

確認下列需求:

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

受控識別需要下列權限:
- 在使用者訂用帳戶中具有寫入或建立資源的權限 (透過參與者角色來提供)。
- 建立角色指派的權限。 通常會透過擁有者使用者存取系統管理員角色,或透過已指派 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        : 9/8/2023 6:52:14 AM
    Id             : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/o
                     perations/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 資源的移動

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 

刪除來源地區 VM

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

下一步

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