它行得通吗? az磁盘创建--for-upload / az磁盘授予访问权限-访问级别写入

时间:2019-08-13 13:53:06

标签: azure azure-storage azure-cli

我正在尝试创建一个空的托管磁盘,然后可以对其进行blob上传或blob复制。 Azure受管磁盘的全部目的是减轻管理存储帐户的麻烦,因此我特别不想创建存储帐户

我尝试做:

  1. az disk create --for-upload true ...。 Azure文档清楚地表明此选项用于创建将由blob上传填充的空磁盘映像。
  2. az disk grant-access --access-level Write产生可写的SAS URL。
  3. az storage blob upload ...使用上一步中的sas详细信息。

有关更多详细信息,请参见此处:https://github.com/Azure/azure-cli/issues/10192

g=group1     # targetr resource group
n=nixosDisk1 # disk name
s=50         # disk size in GB
timeout=$(( 60*60 )) # sas url timeout

./az.sh disk create \
  --resource-group $g \
  --name $n \
  --size-gb $s \
  --for-upload true

sasurl="$(\
  ./az.sh disk grant-access \
    --access-level Write \
    --resource-group $g \
    --name $n \
    --duration-in-seconds $timeout \
      | jq -r '.accessSas')"

# decompose the URL into parts:
strg="md-impexp-jbvwf1mxwlr1"
cntr="mn02nwdj3lzl"
blob="abcd"
sastoken="sv=2017-04-17&sr=b&si=295e4a79-c2ac-4064-96c7-f6cb408ea89d&sig=zeTB%2FFGm3FEqkRg6XqsNLfF8ohgRHfGa6XSe2TDwU%2Fc%3D"

f="/tmp/azure-cli/disk.vhd"

./az.sh storage blob upload \
  --account-name "${strg}" \
  --container-name "${cntr}" \
  --name "$blob" \
  --sas-token "$sastoken" \
  --file "$f"

这当然会失败,并显示一个错误,除了我的GitHub错误报告外,互联网上没有其他错误:

<Error><Code>ApiNotSupportedForAccount</Code><Message>This API is not supported for the account

详细说明为什么我希望这样做:

  1. documentation for az disk create's flag --for-output说:

      

    创建磁盘以供以后通过存储命令上载blob。

         

    运行“ az磁盘授予-访问-访问级别写入”以检索磁盘的SAS令牌。

  2. changelog for the Azure Storage python SDK包含以下文本:

      

    新版本的托管磁盘

         

    使用带有AccessLevel.Write的GrantAccess API来将SAS写入磁盘。这是一个新的访问级别,只能在上载到新磁盘时使用。然后,客户可以使用存储API上载磁盘的位。

         

    有与上载过程相关联的新DiskState(DiskState.ReadyToUpload和DiskState.ActiveUpload)。

请注意,在创建磁盘时,磁盘状态为“ ReadyToUpload”,并且在检索SAS令牌时,即使在开始Blob操作之前,它也会自动更改为“ ActiveUpload”。

所有这些都表明我的脚本应该可以工作……但事实并非如此。

1 个答案:

答案 0 :(得分:1)

一段时间之前,我遇到了同样的问题。我使用了很多方法对其进行测试。最后,我发现是否可以使用AzCopy.exe将本地vhd文件上传到磁盘。

  

azcopy复制“ vhd文件的网址”“磁盘的网址” --blob型PageBlob

enter image description here