【问题标题】:How to create vm using custom image from different storage account, on Azure如何在 Azure 上使用来自不同存储帐户的自定义映像创建 vm
【发布时间】:2017-05-11 20:27:41
【问题描述】:

我目前正在使用this template 通过自定义图像创建虚拟机。对于操作系统磁盘部分:

"storageProfile": {
  "osDisk": {
    "name": "[concat(variables('vmName'),'-osDisk')]",
    "osType": "[parameters('osType')]",
    "caching": "ReadWrite",
    "createOption": "FromImage",
    "image": {
      "uri": "[variables('userImageName')]"
    },
    "vhd": {
      "uri": "[variables('osDiskVhdName')]"
    }
  }
}

是否有可能 image 和 vhd 字段存储在不同的存储帐户中?

更新

我尝试在同一个资源组中使用两个存储帐户。但是错误信息中仍然提到“源和目标存储帐户不同”

【问题讨论】:

    标签: azure azure-resource-manager


    【解决方案1】:

    这是我通过测试从 Azure ARM 自定义映像启动 VM 时发现的:

    1. 自定义映像可以位于 VM 以外的不同存储帐户中
    2. 自定义映像存储帐户需要与 VM 位于同一订阅、同一区域和同一资源组中

    我尝试从来自不同资源组和存储帐户(相同订阅、相同区域)的自定义映像启动 VM,但出现错误: “磁盘的源和目标存储帐户不同” 但是,如果我在资源组相同的情况下从不同存储帐户的自定义映像启动 VM,我的 VM 启动时不会出错。

    【讨论】:

    • 不,持有自定义映像的存储帐户可以存在于与持有要从映像创建的 vm 的存储帐户不同的资源组中。但是您提到的错误(与不同的存储帐户有关)可能是由于“VM VHD”的存储帐户不同。它应该与自定义图像相同
    【解决方案2】:

    要求源映像和目标 vhd 位于同一存储帐户中,但要求存储帐户与 VM 位于同一资源组中。它必须位于同一区域/位置,但不必位于同一资源组中。

    因此您可以预先设置一个存储帐户,将您的源映像放在那里,而不必担心在部署期间复制它,这将自动发生。这是我如何配置模板的 sn-p:

    "userImageName":"[concat('http://',parameters('userImageStorageAccountName'),'.blob.core.windows.net/',parameters('userImageStorageContainerName'),'/',parameters('userImageVhdName'))]",
    "osDiskVhdContainer": "[concat('http://',parameters('userImageStorageAccountName'),'.blob.core.windows.net/',parameters('vmImageStorageContainerName'),'/')]"
    

    相同的存储帐户,但图像和 vhd 的容器不同。

    所以请确保:

    1. source 和 dest 在同一个 storageAccount 中
    2. VM 和存储位于同一区域(例如东亚)
    3. 使用新的存储帐户(由 ARM 提供)而不是“经典”

    【讨论】:

    • 我正在使用此处的模板 - github.com/Azure/azure-quickstart-templates/blob/master/… 我无法理解我应该在哪里进行更改,以便旋转 vm 后的图像 vhd 和 vhd 驻留在不同的容器中但在同一个存储中帐户。请您指导我。
    • 该特定模板应该可以正常工作...它希望您提供源图像的完整 uri,例如:test.blob.core.windows.net/myimages/source.vhd - 然后模板将该图像复制到名为“vhds”的容器 - 只要您的源图像在一个名为“vhds”的容器中not 就可以了。请注意,只要文件名不同,您实际上可以将它们放在同一个容器中,但我发现这让经理感到困惑。这有帮助吗?
    • 它有帮助。谢谢你:)
    【解决方案3】:

    对我来说,它就是这样工作的:

    先决条件 - 具有用户映像 VHD 的存储帐户应该是 相同,在同一组中。

    然后,它起作用了。

    【讨论】:

      【解决方案4】:

      我不知道其他答案是如何被赞成的。 OP 帖子是正确的 - 自定义映像和 VM 操作系统磁盘需要在同一个存储帐户中,这是一个很大的限制。刚刚尝试使用 API,我得到了:

      "MsRestAzure::AzureOperationError: ConflictingUserInput: Source and destination storage accounts for disk test-terminate are different."
      

      【讨论】:

        【解决方案5】:

        如果different storage account 是指另一个订阅中的存储帐户,则不是。存储帐户和虚拟机必须在同一个订阅中。

        更新

        在此处的模板描述页面中找到答案:https://github.com/Azure/azure-quickstart-templates/tree/master/101-vm-from-user-image

        先决条件 - 具有用户映像 VHD 的存储帐户应该 已存在于同一资源组中。

        因此,基于此,只要您的存储帐户在同一个 Azure 订阅中并且在同一个资源组中,即使存储帐户不同,您也应该没问题。

        【讨论】:

        • 嗨,很抱歉造成误导。我的意思是同一个订阅中有两个存储帐户。
        • 感谢您的澄清。在经典 VM 创建方案中,存储帐户和 VM 应位于同一订阅中。为了减少延迟,它们应该位于同一区域(或“现已弃用”的关联组)。鉴于您使用的是 Azure 资源管理器,我认为通常关于相同订阅和区域的相同规则仍然适用,但需要检查的一件事是它们是否需要位于相同的资源组中。让我找出那个信息。根据我的发现,我会相应地更新我的答案。
        • 更新了我的答案。 HTH。
        • 谢谢。我目前的工作是首先创建存储帐户并上传我的图像。然后使用此模板创建 VM。但它需要 2 个模板(一个用于存储帐户,另一个用于 vm)。
        • 我会再试一次。如果它不起作用,我会发布错误消息。感谢您的支持!
        猜你喜欢
        • 1970-01-01
        • 2017-05-07
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-24
        • 1970-01-01
        相关资源
        最近更新 更多