Azureのストレージアカウント間でデータをコピーする方法として、一旦、サーバにBLOBをダウンロードして、別のストレージアカウントにアップロードする方法もありますが、今回は、URL指定でAzureストレージアカウント間で直接コピーするためのPowerShellを書いてみました。
#Azureモジュールのインポート Import-Module Azure #宛先のAzureストレージアカウント情報の設定 $protocol = "https" #http or https $storageAccountName = "xxxxxxxxxxx" #ストレージアカウント名 $primaryKey = "xxxxxxxxxx" #プライマリアクセスキー $connectionString = "DefaultEndpointsProtocol=$($protocol);AccountName=$($storageAccountName);AccountKey=$($primaryKey)" #コピー元のBLOBのURL $sourceBlobUrl = "http://xxxxxxxx.blob.core.windows.net/vhds/xxxx.vhd" #コピー先のコンテナとBLOBの名前 $targetContainerName = "vhds" $targetBlobName = "xxxx.VHD" #Azureストレージ操作用のクライアント生成 [Microsoft.WindowsAzure.Storage.CloudStorageAccount]$storageAccount = [Microsoft.WindowsAzure.Storage.CloudStorageAccount]::Parse($connectionString) [Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient]$client = $storageAccount.CreateCloudBlobClient() #コンテナとBLOBの参照を生成 $container = $client.GetContainerReference($targetContainerName) $newBlob = $container.GetPageBlobReference($targetBlobName) #空の情報をアップロードして空のBLOB作成 $newBlob.UploadFromByteArray((New-Object Byte[] 0),0,0) #コピー元のBLOBからBLOBのデータコピー開始 Write-Host (Get-Date) ": Copy Start" $newBlob.StartCopyFromBlob($sourceBlobUrl,$null,$null,$null,$null) #コピーステータス監視 do { Start-Sleep -Seconds 30 $copyStatus = $client.GetBlobReferenceFromServer($newBlob.Uri.AbsoluteUri).CopyState.Status Write-Host (Get-Date) ": Copy Status:" $copyStatus }while($copyStatus -eq [Microsoft.WindowsAzure.Storage.Blob.CopyStatus]::Pending) Write-Host (Get-Date) ": Copy Completed"
前にこちらの記事でAzureのBlobのスナップショットをPowerShellから取得する方法を書きました。
こちらと合わせて使うってみると便利です。
【Azure】PowerShellでBLOB上のVHDのSnapshot作成・取得・削除の操作をする - YOMON8.NET