管理ディスクのスナップショットから仮想マシンを複製する

内容

Managed Diskを利用している仮想マシン同じリージョンに複製する手順をまとめます。異なるリージョンへの複製は参考サイトにも記載されていますが出来ません。検証したら『az disk create』で失敗しました。また本手順はサブスクリプションを跨いで複製することも想定してAzure Blob Storageへのコピーを手順に追加しています。本当に可能なのか近日中に検証する予定です(なので参考程度にしてください。)。単純にスナップショットから仮想マシンを複製するだけならもっと簡単にできます。参考サイトに手順が記載されていますので、そちらを参照してください。

ディスクのスナップショットを取得

管理ポータルの仮想マシンからディスクを選択します。
f:id:nori-tech:20190317122155p:plain
ディスク一覧が表示されるので取得したいディスクを選んで、スナップショット作成ボタンを押します。
f:id:nori-tech:20190317122259p:plain
必要な情報を入力して作成します。アカウントの種類は管理ディスクの種類に合わせたほうが良いです。
f:id:nori-tech:20190317122456p:plain
これでスナップショットが作成できました。
f:id:nori-tech:20190317122842p:plain

スナップショットからディスクをコピー

スナップショットからディスクをBlobとしてAzure Blob Storageに複製します。

コピー用のAzure Blob Storageを作成

仮想マシンと同じ東日本リージョンに作成します。
f:id:nori-tech:20190317143255p:plain
またコンテナも同時に作成しておきます。
f:id:nori-tech:20190317143919p:plain

スナップショットのSASを取得

次のコードをクラウドシェルで実行します。

$sas=$(az snapshot grant-access --resource-group RG-VM --name snapshot-vmtest1981_OsDisk_1_1c4d158fdc434717b10835305ff5f749 --duration-in-seconds 3600 --query [accessSas] -o tsv)

ローカル環境で実行したらSASが空だったのでクラウドシェルでの実行を薦めます。空なのは不具合が原因のようです。ローカルで実行したい場合は参考にしてください。
grant-azurermsnapshotaccess returning null accesssas · Issue #5956 · Azure/azure-powershell · GitHub

コードを実行するとスナップショットのSAS(正確にはURL + SAS)が取得できます。
f:id:nori-tech:20190317130843p:plain

Azure Blob Storageにディスクをコピー

次のコードをクラウドシェルで実行します。$sasには前回実行した結果のURL + SASが格納されている前提です。

az storage blob copy start --destination-blob <スナップショットのコピー後のファイル名> --destination-container <Blob Storage コンテナ名> --account-name <Blob Storage アカウント名> --account-key <Blob Storage アカウントキー> --source-uri $sas

ディスクコピーの進捗を確認

az storage blob copy startは実行後にバックエンドで処理されるので、都度進捗を確認する必要があります。
以下のコードで確認できます。statusがpendigからsuccessに変わればコピー成功です。

az storage blob show  -n <スナップショットのコピー後のファイル名>--account-name <Blob Storage アカウント名>--account-key <Blob Storage アカウントキー> -c <Blob Storage コンテナ名>

コピー完了したらコンテナ配下にファイルが作成されていることが確認できます。
f:id:nori-tech:20190317144306p:plain

コピーしたファイルから管理ディスクを作成

次のコードで管理ディスクを作成できます。

az disk create --resource-group RG-VM --name hogehogehoge --source https://blob20190317.blob.core.windows.net/diskcontainer/snapshotfile  --sku Premium_LRS 

sourceに指定するURLは管理ポータルから確認できます。
f:id:nori-tech:20190317144420p:plain

コードを実行するとhogehogehogeという名前で管理ディスクが作成されます。
f:id:nori-tech:20190317144832p:plain

管理ディスクから仮想マシンを作成

次のコードで仮想マシンを作成します。

az vm create --resource-group RG-VM --name myVM2 --attach-os-disk hogehogehoge --os-type windows

MyVM2とう名前で仮想マシンが作成されました。
f:id:nori-tech:20190317145135p:plain

複製した仮想マシンに接続

作成後は複製したマシンと同じユーザー/パスワードでRDPで接続できました。
f:id:nori-tech:20190317145500p:plain