👻
Azure CLI&PowerShell CoreでManaged DiskをBLOB Storageにコピーする
結論
PowerShellではAzure CLIではなく、同等のAzure PowerShellを使え。
メモ
Azure CLIを利用していて、次のような問題にあたりました。対処は可能ですが、逐一こういった問題に対処することを考えるより、すなおにAzure PowerShellを利用した方がよさそうです。
下記のようにManaged DiskをVHDにエクスポートして、Azure CLIでコピーしたらエラーができて実行できませんでした。
# Managed DiskをVHDファイルにエクスポート
$sas = az disk grant-access `
--resource-group $resourceGroupName `
--name $diskName `
--duration-in-seconds 3600 `
--access-level Read `
--query "accessSas" `
--output tsv
# Blob Storageコピー
az storage blob copy start `
--account-key $storageAccountKey `
--account-name $storageAccountName `
--destination-container $containerName `
--destination-blob $vhdFileName `
--source-uri $sas
エラーの詳細はつぎのとおりです。
Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
RequestId:9d7078d6-501e-0009-27cf-xxxxxxxxxxx
Time:2024-08-13T22:20:41.9863384Z
ErrorCode:CannotVerifyCopySource
'sr' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'si' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'sig' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
コピーにかかった時間: 1.28059 秒
これは$sasに&が含まれていて、実行時に展開されているからのようです。つぎのようにダブルクォーテーションで括って渡すことで正常に実行できます。
$sas = '"' + $sas + '"'
全文はこちら。
# Managed DiskをVHDファイルにエクスポート
$sas = az disk grant-access `
--resource-group $resourceGroupName `
--name $diskName `
--duration-in-seconds 3600 `
--access-level Read `
--query "accessSas" `
--output tsv
$sas = '"' + $sas + '"'
# Blob Storageコピー
az storage blob copy start `
--account-key $storageAccountKey `
--account-name $storageAccountName `
--destination-container $containerName `
--destination-blob $vhdFileName `
--source-uri $sas
Discussion