Azure PowerShell と CLI を使用して可用性ゾーン内の仮想マシンを移動する

この記事では、Azure PowerShell と CLI コマンドレットを使用して、Azure 単一インスタンス VM をリージョンからゾーンの可用性ゾーンに移動する方法について詳しく説明します。 可用性ゾーンとは、1 つの Azure リージョン内で物理的に分離されたゾーンのことです。 可用性ゾーンを使用してデータセンター全体に及ぶ珍しい障害や損失からアプリとデータを保護します。

可用性ゾーンを使用するには、サポートされている Azure リージョンに仮想マシンを作成します。

前提条件

移動プロセスを開始する前に、次の要件を確認します。

要件 説明
サブスクリプションのアクセス許可 移動したいリソースを含むサブスクリプション上の "所有者" アクセス権があることを確認します。

マネージド ID には、以下のアクセス許可が必要です。
- "共同作成者ロール" で利用可能な、ユーザー サブスクリプション内のリソースの書き込みまたは作成を行うためのアクセス許可。
- ロールの割り当てを作成するためのアクセス許可。 通常、"所有者" ロール、"ユーザー アクセス管理者" ロール、または Microsoft.Authorization ロールの割り当てか書き込みアクセス許可の割り当てを持つカスタム ロールで利用可能です。 データ共有リソースのマネージド ID に Azure データ ストアへのアクセス権が既に付与されている場合は、このアクセス許可は必要ありません。
Azure ロールの詳細については、こちらを参照してください
VM のサポート サポートされているリージョンを確認します。

- サポートされているコンピューティングストレージネットワークの設定を確認します。
VM 正常性状態 ゾーン移動を試みるにあたって、移動したい VM は正常な状態である必要があります。 VM のゾーン移動を試みる前に、保留中のすべての再起動と必須の更新が完了し、仮想マシンが動作していて正常な状態であることを確認します。

PowerShell および CLI の要件を確認する

リソースの移動操作のほとんどは、Azure portal、PowerShell、CLI のいずれを使用しても同じですが、いくつかの例外が存在します。

操作 ポータル PowerShell/CLI
移動コレクションを作成する 移動コレクション (移動しようとしているすべてのリージョン VM の一覧) は、自動的に作成されます。 必要な ID のアクセス許可は、ポータルによってバックエンドで割り当てられます。 PowerShell コマンドレットまたは CLI コマンドレットを使用して以下のことを行うことができます。
- マネージド ID をコレクションに割り当てる。
- リージョン VM をコレクションに追加します。
リソースの移動操作 手順を検証し、"ユーザー" 設定の変更を検証します。 移動の開始は移動プロセスを開始し、ターゲット ゾーンにソース VM のコピーを作成します。 また、ターゲット ゾーンに新しく作成された VM の移動の最終処理も行います。 PowerShell コマンドレットまたは CLI コマンドレットで以下のことを行うことができます。
- リージョン VM をコレクションに追加します
- 依存関係を解決します
- 移動を実行します。
- 移動をコミットします。

サンプルの値

スクリプトの例では、以下の値を使用します。

設定
サブスクリプション ID subscription-id
移動リージョン 米国東部
リソース グループ (移動コレクションのメタデータを保持) RegionToZone-DemoMCRG
移動コレクション名 RegionToZone-DemoMC
移動コレクションの場所 eastus2euap
IdentityType SystemAssigned
VM 名 demoVM-MoveResource
移動の種類 RegionToZone

Azure へのサインイン

Connect-AzAccount コマンドを使用して Azure サブスクリプションにサインインし、画面上の指示に従います。

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

移動コレクションを設定する

MoveCollection オブジェクトには、移動するリソースに関するメタデータと構成情報が格納されます。 移動コレクションを設定するには、以下を実行します。

  • 移動コレクションのリソース グループを作成します。
  • MoveCollection リソースを作成できるように、サービス プロバイダーをサブスクリプションに登録します。
  • マネージド ID を使用して MoveCollection オブジェクトを作成します。 Resource Mover サービスが配置されているサブスクリプションに MoveCollection オブジェクトがアクセスできるようにするには、サブスクリプションによって信頼されているシステム割り当てマネージド ID (旧称: マネージド サービス ID (MSI)) が必要です。
  • マネージド ID に Resource Mover サブスクリプションへのアクセスを許可します。

リソース グループを作成する

次のコマンドレットを使用して、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. MoveCollection リソースを作成できるように、次のとおり、Microsoft.Migrate リソース プロバイダーを登録します。

    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 オブジェクトを作成し、これにマネージド ID を割り当てます。

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

Note

リージョンからゾーンへの移動の場合、MoveType パラメーターは RegionToZone に設定し、MoveRegion パラメーターはゾーン移動を行っているリソースを配置する場所に設定する必要があります。 パラメーターの SourceRegionTargetRegion が不要であり、null に設定されている必要があることを確認します。

マネージド ID にアクセスを許可する

次のとおり、マネージド ID に Resource Mover サブスクリプションへのアクセスを許可します。 自分がサブスクリプションの所有者でなければなりません。

  1. MoveCollection オブジェクトから ID の詳細を取得します。

    $moveCollection = Get-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC" -ResourceGroupName "RegionToZone-DemoMCRG"
    $identityPrincipalId = $moveCollection.IdentityPrincipalId
    
  2. Azure Resource Mover がサブスクリプションにアクセスしてリソースを移動しやすいように、必要なロールを ID に割り当てます。 移動に必要なアクセス許可の一覧を確認します。

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

リージョン VM をコレクションに追加する

移動したい既存のソース リソースの ID を取得します。 移動先リソース設定オブジェクトを作成し、移動コレクションにリソースを追加します。

Note

移動コレクションに追加されたリソースは、同じサブスクリプション内に存在する必要がありますが、異なるリソース グループに存在していても構いません。

  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 キー コンテナー、ディスク暗号化セット。
  • ネットワーク リソース設定: ネットワーク インターフェイス、仮想ネットワーク (VNets/)、ネットワーク セキュリティ グループ/ネットワーク インターフェイスに関しては以下のいずれかを行えます。
    • 宛先リージョンの既存のネットワーク リソースを使用します。
    • 別の名前で新しいリソースを作成します。
  • パブリック 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. リソース コレクションからリソースを削除するには、こちらの手順に従います。

Availability Zones の 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 ]

容量に関する推奨事項

選んだ可用性ゾーン 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 をもう一度実行します

    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

Commit

最初の移動後に、移動のコミットまたは破棄を行う必要があります。 コミットはターゲット リージョンへの移動を完了します。

以下のように移動をコミットします。

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 

リソースを削除する

次のコマンドレットを使用して、MoveCollection から 1 つ以上のリソースを削除できます。

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

Note

マネージド ID の認可の問題が発生した場合は、これらの手順を再度実行して、マネージド ID へのアクセスを再度有効にします。

ソースのリージョン VM を削除する

移動をコミットし、ターゲット リージョンでリソースが期待どおりに動作していることを確認したら、以下を使用して各ソース リソースを削除できます。

次のステップ

ポータル経由で、単一インスタンス Azure VM をリージョンからゾーンの構成に移動する方法を学習します。