ストレージアカウント内のすべてのコンテナを別のストレージアカウント上の単一のコンテナにコピーしようとしています。私はこれを自分のマシン上で問題なく稼働させましたが、Azure Automationを使用して自動化したいと思います。Powershellワークフロー内でAzureStorageContextを使用する
標準のPowerShellスクリプトを実行すると、すべての非同期呼び出しが同期して実行されます。これを解決するために、「Powershell Workflow」ランブックを追加しようとしました。それは、AzureStorageContext
のインスタンスを必要とするAzureストレージコマンドをいくつか呼び出しているということです。問題は、文字列にシリアライズされているため、コンテキストをバインドできないことです。
$destinationContext = (New-AzureStorageContext -StorageAccountName $destinationAccountName -StorageAccountKey $destinationAccountKey)
$sourceContext = (New-AzureStorageContext -StorageAccountName $prodAccountName -StorageAccountKey $prodAccountKey)
$allContainers = Get-AzureStorageContainer -Context $sourceContext
$startTime = Get-Date -Format "yyyyMMddhhmmss"
foreach ($container in $allContainers.Name)
{
$allBlobs = (Get-AzureStorageBlob -Container $container -Context $sourceContext).Name
foreach -Parallel ($blob in $allBlobs)
{
$fileName = $startTime + "/" + $container + "/" + $blob
Write-Information "Copying $fileName"
Start-AzureStorageBlobCopy -SrcBlob $blob -DestBlob $fileName -SrcContainer $container -Context $sourceContext -DestContext $destinationContext -DestContainer $destinationContainer
}
}
このための標準的な回避策は、コンテキストオブジェクトを必要と何かを処理するInlineScript
ブロックを使用することです:
は、私は、次のコードを持っています。しかし、もし私がそれをやろうとすれば、私はブロブを並行してコピーする能力を失うでしょう。
すべてのBLOBのcopyコマンドを並列に開始している間にAzure Automationでこれを行う方法はありますか?
私はこれを試しましたが、コンテキストを作成するときに時々幸せではありませんでした。これを行うオーバーヘッドのために改善はあまりありませんでした。私はそれが実際にBLOBをコピーするのを待っているわけではないことに気づいた。私は自動化でそれを持つことができる場合、私は仕事で2時間以上かかることができます。ご協力いただきありがとうございます。 – Jonathan