【问题标题】:Azure: blob uri null when creating image from VMAzure:从 VM 创建映像时 blob uri null
【发布时间】:2017-07-05 17:02:30
【问题描述】:

我正在使用 Azure CLI v2.0,当我尝试从 VM 创建映像时,blob URI 为空: { ... “操作系统磁盘”:{ “blobUri”:空, ... } ... }

我按照Microsoft doc 中的步骤操作,并使用了在 Azure 门户上创建的 Ubuntu LTS VM。

奇怪的是,我已经从虚拟机创建了一个映像,而此时,我的映像有一个 blob URI。

我需要 Blob URI 来获取 SAS,以便在 Azure 市场中发布应用程序。

此外,该 URI 也不会出现在 Azure 门户中,如果我尝试从该映像创建 VM,它会成功。

有人对为什么会发生这种情况有任何建议吗?

谢谢。

【问题讨论】:

  • 你的意思是找不到新图片的URI?
  • 是和否:我不知道我是找不到它还是因为我在 Azure 门户上找不到它,也无法使用 Azure 存储资源管理器工具来创建它。
  • 使用CLI 2.0创建azure镜像,该镜像不存储在storage account中,可以在images找到。

标签: image azure virtual-machine


【解决方案1】:

默认情况下,我们使用 CLI 2.0 创建镜像,新创建的镜像存储在 Azure 存储帐户中,我们可以在 images 找到它:

================================================ =========
更新
托管 磁盘创建映像,我们在 Azure 门户中找不到 URI:

目前,我们无法为托管映像创建 SAS。
在您的场景中,我认为我们应该使用快照。快照是磁盘在拍摄时的副本,它仅适用于一个磁盘。如果您的虚拟机只有一个磁盘(操作系统),我们可以对其进行快照(我们应该先对其进行概括)。

创建快照后,我们可以授予对该快照的访问权限,也可以将该快照复制到目标 Azure 订阅。然后我们可以使用这个快照创建一个镜像,并使用这个镜像创建一个新的vm。(快照可以复制到不同的区域。)

关于创建这个快照的SAS,我们可以使用CLI 2.0来做。

C:\Users\jason>az snapshot grant-access --help

Command
    az snapshot grant-access: Grant read access to a snapshot.

Arguments
    --duration-in-seconds [Required]: Time duration in seconds until the SAS access expires.

Resource Id Arguments
    --ids                           : One or more resource IDs (space delimited). If provided, no
                                      other 'Resource Id' arguments should be specified.
    --name -n                       : The name of the snapshot.
    --resource-group -g             : Name of resource group. You can configure the default group
                                      using `az configure --defaults group=<name>`.

更多关于使用快照创建新虚拟机的信息,请参考link

如何从快照创建托管镜像,请参考link

更新2

我们可以使用 powershell 将托管磁盘复制到 Azure 存储帐户:

##create $SAS
$sas = Grant-AzureRmDiskAccess -ResourceGroupName shui -DiskName test -DurationInSecond 3600 -Access Read 
$destContext = New-AzureStorageContext –StorageAccountName contosostorageav1 -StorageAccountKey 'YourStorageAccountKey' 
Start-AzureStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer 'vhds' -DestContext $destContext -DestBlob 'MyDestinationBlobName.vhd'

更新3:
我们可以使用 CLI 2.0 将快照复制到 Azure 存储帐户:

az account set --subscription $subscriptionId

sas=$(az snapshot grant-access --resource-group $resourceGroupName --name $snapshotName --duration-in-seconds $sasExpiryDuration --query [accessSas] -o tsv)

az storage blob copy start --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-name $storageAccountName --account-key $storageAccountKey --source-uri $sas

有关将快照复制到存储帐户的更多信息,请参阅link

【讨论】:

  • 不,我得到了图像,但没有得到需要生成 SAS 的操作系统磁盘的 blob uri:i.stack.imgur.com/ZsN5M.png
  • @Gabriel 目前,我们无法授予对托管映像的访问权限。作为一种解决方法,也许我们可以使用快照来做到这一点,我们可以将快照复制到不同的区域,并使用该快照创建一个新的托管映像,然后使用该映像创建新的 VM。我已经更新了我的答案,请检查一下。
  • 谢谢您,但我按照步骤操作,但我认为这无法为 Azure 市场上的应用程序的 SKU 获得正确的 SAS:如文档 (docs.microsoft.com/en-us/azure/marketplace-publishing/…) 中所述. SAS URI 必须包含 sr=c 以声明容器访问级别,并包含 sp=rl 以声明对 blob 容器的读取和列表访问。在这里,我只得到 sr=b 的快照,据我所知,快照的 SAS 是只读的。另外,我上个月成功地为以前的版本创建了一个带有 blob URI 的图像
  • @Gabriel 此虚拟机是新创建的吗?
  • 对不起,我不明白你的问题。我从我的现有映像创建了一个 VM,这就是您要问的吗?
猜你喜欢
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
相关资源
最近更新 更多