Azureでネット経由ではなくデータを他のホストにコピーする

オンプレ環境を移行すると、ともするとネットワーク経由で、例えばrsyncscpを使ってコピーしがちだけれども、スナップショットを使ってコピーした方が数千倍高速(なはず)。

#!/bin/bash
readonly myRegion="japaneast"
readonly myResourceGroup="MyGroup"

readonly sourceVM="gitreplica"
readonly sourceVMURL="$sourceVM.$myRegion.cloudapp.azure.com"
readonly sourceUser="user"

readonly targetVM="gitbuild"
readonly targetVMURL="$targetVM.$myRegion.cloudapp.azure.com"
readonly targetUser="user"

readonly mntPos="/media/source/"
readonly repoDir=$mntPos"mirror/"

#DataDiskは1つであることが前提、基本的に変更されないのでこれも毎回実行する必要は無い
#1. sourceのDataDiskのIDを取得
datadiskid=$(az vm show -g $myResourceGroup -n $sourceVM --query "storageProfile.dataDisks[0].managedDisk.id" -o tsv)
# echo $datadiskid

#2. DataDiskのスナップショットを取得する
snapshotname="$sourceVM-snapshot-$(date +%s)"
az snapshot create -g $myResourceGroup --source "$datadiskid" --name $snapshotname --sku Premium_LRS

#3. スナップショットをtargetにアタッチする
az disk create -g $myResourceGroup --name $snapshotname-disk --source $snapshotname 
az vm disk attach -g $myResourceGroup --vm-name $targetVM --disk $snapshotname-disk --sku Premium_LRS --caching ReadWrite

#4. アタッチされたディスクをマウントする
ssh $targetUser@$targetVMURL "sudo mount /dev/sdc1 $mntPos"

#5. 何かしらの処理を行う
#

#6. ディスクをデタッチする
ssh $targetUser@$targetVMURL "sudo umount $mntPos"
az vm disk detach -g $myResourceGroup --vm-name $targetVM --name $snapshotname-disk

#8. ディスク・スナップショットを消去
az disk delete -g $myResourceGroup --name $snapshotname-disk --yes
az snapshot delete -g $myResourceGroup --name $snapshotname