【发布时间】:2019-08-13 13:53:06
【问题描述】:
我正在尝试创建一个空的托管磁盘,然后我可以将其 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 disk grant-access --access-level Write”以检索磁盘的 SAS 令牌。
-
changelog for the Azure Storage python SDK 包含以下文字:
新版托管磁盘
将 GrantAccess API 与 AccessLevel.Write 结合使用以将 SAS 写入磁盘。这是一个新的访问级别,只能在上传到新磁盘时使用。然后客户可以使用存储 API 为磁盘上传位。
有与上传过程相关的新 DiskState(DiskState.ReadyToUpload 和 DiskState.ActiveUpload)。
请注意,当您创建磁盘时,磁盘状态为“ReadyToUpload”,当您检索 SAS 令牌时,它会自动更改为“ActiveUpload”,甚至在开始 blob 操作之前。
所有这一切都表明我的脚本应该可以工作......然而,它没有。
【问题讨论】:
标签: azure azure-storage azure-cli