Azure 将自定义VM映像从一个资源组复制到另一个资源组(在同一订阅中)

Azure 将自定义VM映像从一个资源组复制到另一个资源组(在同一订阅中),azure,azure-resource-manager,azure-sdk-.net,Azure,Azure Resource Manager,Azure Sdk .net,我正在尝试从自定义VM映像使用Azure资源管理库for.net创建模板部署。可以通过创建资源组并使用上述库部署所需资源(使用模板文件)来实现这一目标。在删除资源组时,我还需要删除在资源组中创建VM时创建的Vhd。但如果我删除资源组,则不会删除vhd文件,因为它是在不同的资源组中创建的(因此存在vm映像的存储帐户不同),而且在创建时,自定义vm映像需要存在于托管虚拟机vhd的存储帐户中。我无法删除包含自定义图像的存储帐户。那么,是否有一种方法可以使用.Net资源管理库将自定义映像(vhd)从存储

我正在尝试从自定义VM映像使用Azure资源管理库for.net创建模板部署。可以通过创建资源组并使用上述库部署所需资源(使用模板文件)来实现这一目标。在删除资源组时,我还需要删除在资源组中创建VM时创建的Vhd。但如果我删除资源组,则不会删除vhd文件,因为它是在不同的资源组中创建的(因此存在vm映像的存储帐户不同),而且在创建时,自定义vm映像需要存在于托管虚拟机vhd的存储帐户中。我无法删除包含自定义图像的存储帐户。那么,是否有一种方法可以使用.Net资源管理库将自定义映像(vhd)从存储帐户复制到新创建的资源组的存储帐户?
或者是否有任何其他解决方法可以在不删除自定义vm映像的情况下删除已创建vm的vhd???

在模板部署期间无法复制blob,当前提供的存储资源在模板部署期间不支持数据平面操作。您可以将其拆分为多个部署,例如:

  • 将新VM的存储帐户部署到新资源组中
  • 运行代码将VHD的自定义映像复制到新资源组中的新存储帐户
  • 将VM部署到新资源组
  • 但是-如果您是通过代码来实现这一点,最简单的方法可能是在删除保存VM的资源组之前获取操作系统VHD的URI。然后在删除RG之后,删除blob。此PowerShell代码将为您提供VM的vhd blob的uri(.net SDK将类似)


    如果RG中有多个VM,那么您将获得一个阵列,并可以对其进行迭代。

    在模板部署期间无法复制blob,当前提供的存储资源不支持在模板部署期间执行数据平面操作。您可以将其拆分为多个部署,例如:

  • 将新VM的存储帐户部署到新资源组中
  • 运行代码将VHD的自定义映像复制到新资源组中的新存储帐户
  • 将VM部署到新资源组
  • 但是-如果您是通过代码来实现这一点,最简单的方法可能是在删除保存VM的资源组之前获取操作系统VHD的URI。然后在删除RG之后,删除blob。此PowerShell代码将为您提供VM的vhd blob的uri(.net SDK将类似)


    如果RG中有多个VM,那么您将获得一个数组,并可以对其进行迭代。

    另一种可能的解决方法是将vhd文件从存储帐户下载到本地文件系统,删除您想要的容器或存储帐户。然后将本地系统上的此vhd文件推送到您使用新创建的azure存储帐户

    Add-azureRmVhd -Destination 'newstorageaccounturi' -LocalFilePath 'C:\users....\' -NumberOfUploaderThreads 5
    

    尽管如此,我不明白你为什么要删除这个虚拟机的vhd?是否要将另一个磁盘附加到它?

    另一种可能的解决方法是将vhd文件从存储帐户下载到本地文件系统,删除容器或存储帐户(如果需要)。然后将本地系统上的此vhd文件推送到您使用新创建的azure存储帐户

    Add-azureRmVhd -Destination 'newstorageaccounturi' -LocalFilePath 'C:\users....\' -NumberOfUploaderThreads 5
    
    尽管如此,我不明白你为什么要删除这个虚拟机的vhd?是否要将其他磁盘连接到它?

    使用 Microsoft Azure存储资源管理器

    从中复制/粘贴VHD

    存储帐户A\Blob容器\上载

    存储帐户B\Blob容器\上载使用 Microsoft Azure存储资源管理器

    从中复制/粘贴VHD

    存储帐户A\Blob容器\上载


    存储帐户B\Blob Containers\uploads

    实际上,在我的场景中,虚拟机将在一段特定时间后删除,如果其vhd没有被删除,那么从长远来看,它将增加存储成本,因为要创建和删除的虚拟机太多。实际上,在我的场景中,虚拟机将在一段特定时间后被删除,如果其vhd不会被删除,那么从长远来看,它将增加存储成本,因为有太多的虚拟机需要创建和删除。是的,这是有意义的。我考虑的另一种方法可能是创建一个不同的容器(在保存vm基本映像的存储帐户中),并将创建的vm的vhd(从基本映像)保存到该容器中,并在需要时删除该容器..这实际上是我为我的一些人所做的,要求存储帐户和虚拟机位于同一位置,这可能意味着保留基本映像的多个副本。@bmoore msft您能就以下问题给我一些指导吗?看起来已经有一个很好的回应了-如果出于某种原因,lmk不起作用…是的,有道理。我考虑的另一种方法可能是创建一个不同的容器(在保存vm基本映像的存储帐户中),并将创建的vm的vhd(从基本映像)保存到该容器中,并在需要时删除该容器..这实际上是我为我的一些人所做的,要求存储帐户和虚拟机位于同一位置,这可能意味着保留基本映像的多个副本。@bmoore msft您能就以下问题给我一些指导吗?看起来已经有一个很好的回应了-lmk,如果因为某种原因不起作用。。。