Azure CLI を使用した VM の復元

Azure Backup では、geo 冗長 Recovery コンテナーに保存される復旧ポイントが作成されます。 復旧ポイントから復元するときは、VM 全体または個々のファイルを復元することができます。 この記事では、CLI を使用して完全な VM を復元する方法について説明します。 このチュートリアルで学習する内容は次のとおりです。

  • 復旧ポイントをリストして選択する
  • 復旧ポイントからディスクを復元する
  • 復元されたディスクから VM を作成する

PowerShell を使用してディスクを復元し、回復した VM を作成する方法については、PowerShell による Azure VM のバックアップと復元に関するページを参照してください。

CLI を使用して、上記の手順を個別に実行せずに、バックアップ コンテンツを VM (元または新規) に直接復元することもできるようになりました。 詳細については、「CLI を使用して仮想マシンにデータを復元する」を参照してください。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • このチュートリアルには、Azure CLI のバージョン 2.0.18 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

  • このチュートリアルでは、Azure Backup で保護されている Linux VM が必要です。 誤って削除した VM の復旧プロセスをシミュレートするには、復旧ポイントのディスクから VM を作成します。 Azure Backup で保護されている Linux VM が必要な場合は、「Back up a virtual machine in Azure with the CLI」 (CLI による Azure での仮想マシンのバックアップ) を参照してください。

Backup の概要

Azure でバックアップが開始されると、VM のバックアップ拡張機能により、特定の時点のスナップショットが取得されます。 バックアップ拡張機能は、最初のバックアップが要求されたときに VM にインストールされます。 Azure Backup は、バックアップが行われるときに VM が実行されていない場合に、基になるストレージのスナップショットも取得します。

既定では、Azure Backup はファイル システム整合性バックアップを取得します。 Azure Backup がスナップショットを取得すると、データは Recovery Services コンテナーに転送されます。 効率を最大に高めるために、Azure Backup は前回のバックアップ以降に変更されたデータ ブロックを特定し、そのデータのみを転送します。

データ転送が完了すると、スナップショットが削除され、回復ポイントが作成されます。

使用可能な復旧ポイントをリストする

ディスクを復元するには、回復データのソースとして復旧ポイントを選択します。 既定のポリシーでは復旧ポイントが毎日作成され、30 日間保持されるため、一連の復旧ポイントを保持し、復旧の特定の時点を選択することができます。

使用可能な復旧ポイントのリストを表示するには、az backup recoverypoint list を使用します。 ディスクの復旧には、復旧ポイントが使用されます。 このチュートリアルでは、使用可能な最新の復旧ポイントが必要です。 --query [0].name パラメーターでは、次のように最新の復旧ポイント名が選択されます。

az backup recoverypoint list \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --backup-management-type AzureIaasVM \
    --container-name myVM \
    --item-name myVM \
    --query [0].name \
    --output tsv

VM ディスクを復元する

重要

マネージド ディスクの復元などの高速復元のすべてのベネフィットを利用できるよう、Az CLI バージョン 2.0.74 以降を使用することを非常に強くお勧めします。 常に最新バージョンを使用することをお勧めします。

マネージド ディスクの復元

バックアップされた VM にマネージド ディスクが存在し、復旧ポイントからマネージド ディスクを復元したい場合は、最初に Azure ストレージ アカウントを指定します。 このストレージ アカウントは、後で復元されたディスクから VM をデプロイするために使用できる、VM の構成とデプロイ テンプレートを格納するために使用されます。 次に、マネージド ディスクの復元先のターゲット リソース グループも指定します。

  1. ストレージ アカウントを作成するには、az storage account create を使用します。 ストレージ アカウント名はすべて小文字で、グローバルに一意である必要があります。 mystorageaccount は、次のように独自の一意の名前に置き換えます。

    az storage account create \
        --resource-group myResourceGroup \
        --name mystorageaccount \
        --sku Standard_LRS
    
  2. az backup restore restore-disks を使用して、復旧ポイントからディスクを復元します。 mystorageaccount は、前述のコマンドで作成したストレージ アカウントの名前に置き換えます。 myRecoveryPointName は、前述の az backup recoverypoint list コマンドから出力を取得した復旧ポイント名に置き換えます。 マネージド ディスクの復元先となるターゲット リソース グループも指定します

    az backup restore restore-disks \
        --resource-group myResourceGroup \
        --vault-name myRecoveryServicesVault \
        --container-name myVM \
        --item-name myVM \
        --storage-account mystorageaccount \
        --rp-name myRecoveryPointName \
        --target-resource-group targetRG
    

    警告

    target-resource-group を指定しないと、マネージド ディスクは、指定したストレージ アカウントにアンマネージド ディスクとして復元されます。 ディスク全体の復元にかかる時間は、指定したストレージ アカウントに依存するため、これは復元時間に大きく影響します。 target-resource-group パラメーターが指定されている場合にのみ、インスタント リストアのベネフィットが得られます。 マネージド ディスクをアンマネージドとして復元する場合は、次に示すように、target-resource-group パラメーターを指定せず、restore-as-unmanaged-disk パラメーターを代わりに指定してください。 このパラメーターは、Azure CLI 3.4.0 以降で利用できます。

    az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --storage-account mystorageaccount \
    --rp-name myRecoveryPointName \
    --restore-as-unmanaged-disk
    

これにより、マネージド ディスクがアンマネージド ディスクとして指定のストレージ アカウントに復元され、"インスタント" リストア機能は利用されなくなります。 CLI の将来のバージョンでは、target-resource-group パラメーターまたは restore-as-unmanaged-disk パラメーターのどちらかを指定することが必須となります。

セカンダリ リージョンへのディスクの復元

VM を保護したコンテナーでリージョンをまたがる復元を有効にしている場合、バックアップ データはセカンダリ リージョンにレプリケートされます。 バックアップ データを使用して復元操作を実行できます。

セカンダリ リージョンにディスクを復元するには、az backup restore restore-disks コマンドで --use-secondary-region フラグを使用します。 セカンダリ リージョンにあるターゲット ストレージ アカウントを指定していることを確認ください。

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --storage-account targetStorageAccountID \
    --rp-name myRecoveryPointName \
    --target-resource-group targetRG
    --use-secondary-region

クロスゾーン復元

Azure ゾーン固定 VM を、同じリージョンの任意の可用性ゾーンで復元できます。

別のゾーンに VM を復元するには、az backup restore restore-disks コマンドで TargetZoneNumber パラメーターを指定します。

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --storage-account targetStorageAccountID \
    --rp-name myRecoveryPointName \
    --target-resource-group targetRG
    --target-zone 3

クロスゾーン復元は、次のシナリオでのみサポートされています。

  • ソース VM がゾーン固定であり、暗号化されていない。
  • 回復ポイントがコンテナー層にのみ存在する。 スナップショットのみ、またはスナップショットとコンテナーの層はサポートされていません。
  • 回復オプションが、新しい VM の作成またはディスクの復元のいずれかである。 [ディスクの交換] オプションでは、ソース データが置換されるため、可用性ゾーン オプションは適用できません。
  • コンテナーのストレージ冗長が ZRS の場合の、同じリージョンでの VM またはディスクの作成。 ソース VM がゾーン固定であっても、コンテナーのストレージ冗長が GRS の場合、これは機能しません。
  • コンテナーのストレージ冗長がリージョンをまたがる復元に対して有効であり、かつペアになっているリージョンでゾーンがサポートされている場合の、ペア リージョンでの VM またはディスクの作成。

アンマネージド ディスクの復元

バックアップされた VM にアンマネージド ディスクが存在し、復旧ポイントからディスクを復元したい場合は、最初に Azure ストレージ アカウントを指定します。 このストレージ アカウントは、後で復元されたディスクから VM をデプロイするために使用できる、VM の構成とデプロイ テンプレートを格納するために使用されます。 既定では、アンマネージド ディスクは元のストレージ アカウントに復元されます。 すべてのアンマネージド ディスクを 1 つの場所に復元したい場合は、指定したストレージ アカウントをそれらのディスクのステージング場所として使用することもできます。

追加手順では、VM を作成するために復元されたディスクが使用されます。

  1. ストレージ アカウントを作成するには、az storage account create を使用します。 ストレージ アカウント名はすべて小文字で、グローバルに一意である必要があります。 mystorageaccount は、次のように独自の一意の名前に置き換えます。

    az storage account create \
        --resource-group myResourceGroup \
        --name mystorageaccount \
        --sku Standard_LRS
    
  2. az backup restore restore-disks を使用して、復旧ポイントからディスクを復元します。 mystorageaccount は、前述のコマンドで作成したストレージ アカウントの名前に置き換えます。 myRecoveryPointName は、前述の az backup recoverypoint list コマンドから出力を取得した復旧ポイント名に置き換えます。

    az backup restore restore-disks \
        --resource-group myResourceGroup \
        --vault-name myRecoveryServicesVault \
        --container-name myVM \
        --item-name myVM \
        --storage-account mystorageaccount \
        --rp-name myRecoveryPointName
    

前に説明したように、アンマネージド ディスクは元のストレージ アカウントに復元されます。 これにより、復元のパフォーマンスが最善になります。 ただし、すべてのアンマネージド ディスクを特定のストレージ アカウントに復元する必要がある場合は、次に示すように関連フラグを使用します。

    az backup restore restore-disks \
        --resource-group myResourceGroup \
        --vault-name myRecoveryServicesVault \
        --container-name myVM \
        --item-name myVM \
        --storage-account mystorageaccount \
        --rp-name myRecoveryPointName \
        --restore-to-staging-storage-account
    ```

## Monitor the restore job

To monitor the status of restore job, use [az backup job list](/cli/azure/backup/job#az-backup-job-list):

```azurecli-interactive
az backup job list \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --output table

出力は次の例のようになります。復元ジョブが進行中であることが示されています。

Name      Operation        Status      Item Name    Start Time UTC       Duration
--------  ---------------  ----------  -----------  -------------------  --------------
7f2ad916  Restore          InProgress  myvm         2017-09-19T19:39:52  0:00:34.520850
a0a8e5e6  Backup           Completed   myvm         2017-09-19T03:09:21  0:15:26.155212
fe5d0414  ConfigureBackup  Completed   myvm         2017-09-19T03:03:57  0:00:31.191807

復元ジョブの [状態][完了] になっている場合は、必要な情報 (VM の構成とデプロイ テンプレート) がストレージ アカウントに復元されています。

マネージド ID を使用したディスクの復元

Azure Backup では、復元操作中にマネージド ID (MSI) を使用して、ディスクを復元する必要があるストレージ アカウントにアクセスすることもできます。 このオプションは現在、マネージド ディスクの復元でのみサポートされています。

コンテナーのシステム割り当てマネージド ID を使用してディスクを復元する場合は、az backup restore restore-disks コマンドに追加フラグ --mi-system-assigned を渡します。 ユーザー割り当てマネージド ID を使用する場合は、パラメーター --mi-user-assigned を渡します。コンテナーのマネージド ID の Azure Resource Manager ID をパラメーターの値として指定します。 コンテナーのマネージド ID を有効にする方法については、この記事を参照してください。

復元されたディスクから VM を作成する

最後のステップでは、復元されたディスクから VM を作成します。 指定したストレージ アカウントにダウンロードされたデプロイ テンプレートを使用して、VM を作成できます。

ジョブの詳細を取得する

結果のジョブの詳細には、クエリを実行してデプロイできるテンプレート URI が示されます。 トリガーされた復元ジョブについてのさらに詳細な情報を取得するには、job show コマンドを使用します。

az backup job show \
    -v myRecoveryServicesVault \
    -g myResourceGroup \
    -n 1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414

このクエリの出力ではすべての詳細が表示されますが、ここで関心があるのはストレージ アカウントの内容のみです。 Azure CLI のクエリ機能を使用して、関連する詳細を取得できます

az backup job show \
    -v myRecoveryServicesVault \
    -g myResourceGroup \
    -n 1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414 \
    --query properties.extendedInfo.propertyBag

{
  "Config Blob Container Name": "myVM-daa1931199fd4a22ae601f46d8812276",
  "Config Blob Name": "config-myVM-1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414.json",
  "Config Blob Uri": "https://mystorageaccount.blob.core.windows.net/myVM-daa1931199fd4a22ae601f46d8812276/config-appvm8-1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json",
  "Job Type": "Recover disks",
  "Recovery point time ": "12/25/2019 10:07:11 PM",
  "Target Storage Account Name": "mystorageaccount",
  "Target resource group": "mystorageaccountRG",
  "Template Blob Uri": "https://mystorageaccount.blob.core.windows.net/myVM-daa1931199fd4a22ae601f46d8812276/azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json"
}

デプロイ テンプレートをフェッチする

テンプレートは、顧客のストレージ アカウントと指定されたコンテナーの下にあるため、直接アクセスすることはできません。 このテンプレートにアクセスするには (一時的な SAS トークンと共に) 完全な URL が必要です。

最初に、ジョブの詳細からテンプレートの BLOB URI を抽出します

az backup job show \
    -v myRecoveryServicesVault \
    -g myResourceGroup \
    -n 1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414 \
    --query properties.extendedInfo.propertyBag."""Template Blob Uri"""

"https://mystorageaccount.blob.core.windows.net/myVM-daa1931199fd4a22ae601f46d8812276/azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json"

テンプレートの BLOB URI は次のような形式であり、テンプレート名が抽出されます

https://<storageAccountName.blob.core.windows.net>/<containerName>/<templateName>

したがって、上の例では、テンプレート名は azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json、コンテナー名は myVM-daa1931199fd4a22ae601f46d8812276 です

ここで、このコンテナーとテンプレートの SAS トークンを取得します (詳しくはこちらをご覧ください)

expiretime=$(date -u -d '30 minutes' +%Y-%m-%dT%H:%MZ)
connection=$(az storage account show-connection-string \
    --resource-group mystorageaccountRG \
    --name mystorageaccount \
    --query connectionString)
token=$(az storage blob generate-sas \
    --container-name myVM-daa1931199fd4a22ae601f46d8812276 \
    --name azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json \
    --expiry $expiretime \
    --permissions r \
    --output tsv \
    --connection-string $connection)
url=$(az storage blob url \
   --container-name myVM-daa1931199fd4a22ae601f46d8812276 \
    --name azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json \
    --output tsv \
    --connection-string $connection)

テンプレートをデプロイして VM を作成する

次に、こちらの説明に従って、テンプレートをデプロイして VM を作成します。

az deployment group create \
  --resource-group ExampleGroup \
  --template-uri $url?$token

VM が回復したディスクから作成されていることを確認するには、次のように、az vm list を使用してリソース グループの VM をリストします。

az vm list --resource-group myResourceGroup --output table

CLI を使用して仮想マシンにデータを復元する

複数の手順を実行せずに、元または別の VM にデータを直接復元できるようになりました。

元の VM にデータを復元する

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --restore-mode OriginalLocation 
    --storage-account mystorageaccount \
    --rp-name myRecoveryPointName \ 
Name      Operation        Status      Item Name    Start Time UTC       Duration
--------  ---------------  ----------  -----------  -------------------  --------------
7f2ad916  Restore          InProgress  myVM         2017-09-19T19:39:52  0:00:34.520850

最後のコマンドは、元の場所の復元操作をトリガーして、既存の VM でデータをインプレース復元します。

新しく作成された VM にデータを復元する

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --restore-mode AlternateLocation \
    --storage-account mystorageaccount \

--target-resource-group "Target_RG" \
    --rp-name myRecoveryPointName \
    --target-vm-name "TargetVirtualMachineName" \
    --target-vnet-name "Target_VNet" \
    --target-vnet-resource-group "Target_VNet_RG" \
    --target-subnet-name "targetSubNet"
Name      Operation        Status      Item Name    Start Time UTC       Duration
--------  ---------------  ----------  -----------  -------------------  --------------
7f2ad916  Restore          InProgress  myVM         2017-09-19T19:39:52  0:00:34.520850

最後のコマンドは、別の場所の復元操作をトリガーして、パラメーター TargetVMNameTargetVNetNameTargetVNetResourceGroupTargetSubnetName で指定された入力に従って、Target_RG リソース グループに新しい VM を作成します。 これにより、必要な VM、仮想ネットワーク、サブネットでデータが復元されます。

次のステップ

このチュートリアルでは、復旧ポイントからディスクを復元し、ディスクから VM を作成しました。 以下の方法を学習しました。

  • 復旧ポイントをリストして選択する
  • 復旧ポイントからディスクを復元する
  • 復元されたディスクから VM を作成する

次のチュートリアルに進み、復旧ポイントからの個々のファイルの復元について学習してください。