我正在尝试创建一个空的托管磁盘,然后可以对其进行blob上传或blob复制。 Azure受管磁盘的全部目的是减轻管理存储帐户的麻烦,因此我特别不想创建存储帐户。
我尝试做:
az disk create --for-upload true ...
。 Azure文档清楚地表明此选项用于创建将由blob上传填充的空磁盘映像。az disk grant-access --access-level Write
产生可写的SAS URL。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
详细说明为什么我希望这样做:
documentation for az disk create
's flag --for-output
说:
创建磁盘以供以后通过存储命令上载blob。
运行“ az磁盘授予-访问-访问级别写入”以检索磁盘的SAS令牌。
changelog for the Azure Storage python SDK包含以下文本:
新版本的托管磁盘
使用带有AccessLevel.Write的GrantAccess API来将SAS写入磁盘。这是一个新的访问级别,只能在上载到新磁盘时使用。然后,客户可以使用存储API上载磁盘的位。
有与上载过程相关联的新DiskState(DiskState.ReadyToUpload和DiskState.ActiveUpload)。
请注意,在创建磁盘时,磁盘状态为“ ReadyToUpload”,并且在检索SAS令牌时,即使在开始Blob操作之前,它也会自动更改为“ ActiveUpload”。
所有这些都表明我的脚本应该可以工作……但事实并非如此。