本文詳細說明如何使用 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 新增至集合中 - 解決相依性問題 - 執行移動作業。 - 提交移動作業。 |
範例值
我們在我們的指令碼範例中使用這些值:
| 設定 | 值 |
|---|---|
| 訂用帳戶識別碼 | 訂閱編號 |
| 移動地區 | 美國東部 |
| 資源群組 (保存移動集合的中繼資料) | RegionToZone-DemoMCRG |
| 移動集合名稱 | RegionToZone-DemoMC |
| 移動集合的位置 | eastus2euap |
| identityType | 系統分配的 |
| VM 名稱 | demoVM-MoveResource |
| 移動類型 | RegionToZone |
登入 Azure
使用 Connect-AzAccount 命令登入 Azure 訂用帳戶並遵循畫面上的指示。
設定訂用帳戶識別碼:
Set-AzContext -SubscriptionId " <subscription-id> "
連接至訂閱 ID:
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e Message : Name : aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e 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
在選取的可用性區域 Standard_DC1ds_v3 中無法使用來源虛擬機器大小 1 時。
建議的動作:在相同的可用性區域中選擇不同的虛擬機大小,或選取具有對應建議 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 ]
容量建議
所選可用性區域 Standard_DC1ds_v3 中目前選取虛擬機器大小 1 的容量建議。
建議的動作: 為了增加成功部署的可能性,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") <remove-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-AzResourceMoverCommit "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -MoveResource $("demoVM-MoveResource")
輸出:
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 從區域移至區域性設定。