使用 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 Cmdlet 或 CLI Cmdlet 來: - 將受控識別指派給集合。 - 將地區 VM 新增至集合中。 |
資源移動作業 | 驗證步驟並驗證使用者設定變更。 起始移動會啟動移動程序,並在目標區域中建立來源 VM 的複本。 它也會完成新建立的 VM 在目標區域中的移動作業。 | 使用 PowerShell Cmdlet 或 CLI 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
註冊資源提供者
註冊資源提供者 Microsoft.Migrate,這樣才能建立 MoveCollection 資源,如下所示:
Register-AzResourceProvider -ProviderNamespace Microsoft.Migrate
等候註冊:
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
參數應設為進行區域移動的資源所在的位置。 確保不需要參數 SourceRegion
和 TargetRegion
,而且應該設為 null。
授與受控識別存取權
授與 Resource Mover 訂用帳戶受控識別存取權,如下所示。 您必須是訂用帳戶擁有者。
從 MoveCollection 物件擷取身分識別詳細資料。
$moveCollection = Get-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC" -ResourceGroupName "RegionToZone-DemoMCRG" $identityPrincipalId = $moveCollection.IdentityPrincipalId
將必要的角色指派給身分識別,讓 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 新增至移動集合中
擷取您要移動之現有來源資源的標識碼。 建立目的地資源設定物件,然後將資源新增至移動集合。
注意
新增至移動集合的資源必須位於相同的訂用帳戶中,但可以位於不同的資源群組中。
建立目標資源設定物件,如下所示:
$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
新增資源
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 和區域
修改設定,如下所示:
擷取您要編輯屬性的移動資源。 例如,若要擷取 VM 執行:
$moveResourceObj = Get-AzResourceMoverMoveResource -MoveCollectionName " RegionToZone-DemoMCRG " -ResourceGroupName " RegionToZone-DemoMC " -Name "PSDemoVM"
將資源設定複製到目標資源設定物件。
$TargetResourceSettingObj = $moveResourceObj.ResourceSetting
在目標資源設定物件中設定參數。 例如,若要變更目的地 VM 的名稱:
$TargetResourceSettingObj.TargetResourceName="PSDemoVM-target"
更新移動資源目的地設定。 在此範例中,我們會將 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 是否對其他資源具有任何相依性,並視需要新增。
解決相依性問題,如下所示:
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
若要取得新增至移動集合中的資源清單:
$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
若要從資源集合中移除資源,請遵循這些指示。
可用性區域 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 或發生容量問題的情況,請更新行動資源,然後再次執行解決。 以下是參考的範例:
根據建議,將虛擬機器移動資源物件更新至新的區域或 SKU。
$targetResourceSettingsObj.TargetVmSize = "Standard_DC1ds_v3" $targetResourceSettingsObj.TargetAvailabilityZone = "3"
更新虛擬機器移動資源
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
再次執行解析
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
中移除單一資源或多個資源:
取得新增至移動集合的移動資源清單:
$list = Get-AzResourceMoverMoveResource -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"
將您找到的移動資源移除:
Invoke-AzResourceMoverBulkRemove -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>" -MoveResource $($list.Name)
將移動集合移除:
Remove-AzResourceMoverMoveCollection -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"
注意
如果您觀察到受控識別授權問題,請再次遵循下列步驟重新啟用受控識別存取。
刪除來源地區 VM
提交移動作業並確認資源在目標地區中如預期般運作之後,您可以使用下列命令來刪除每個來源資源:
下一步
了解如何透過入口網站,將單一執行個體 Azure VM 從地區組態移至區域組態。