Azure 市场虚拟机镜像制作指南

本指南为 Azure 市场 ISV(独立软件供应商)介绍虚拟机镜像制作、上传到 Azure、 VHD认证以及发布前测试准备的主要过程。

本文中的 Azure 市场作用范围均指中国大陆,“镜像”或“映像”表示同一含义。

1. 为 Azure 市场制作虚拟机镜像的先决条件

下载需要用到的工具和应用

在开始之前应当安装下面的工具:

支持的平台

您可以在 Windows 或 Linux 上开发基于 Azure 的 VM,在镜像发布过程中的一些问题———如创建一个 Azure 兼容的虚拟硬盘(VHD),用到的工具和步骤取决于您所使用的操作系统:

  • 如果您使用 Linux,请参阅 Azure 认可的 Linux 发行版

  • 如果你在制作 Windows镜像,请确保使用正确的基本 VHD。

    用于 VM 镜像的操作系统 VHD 必须基于 Azure 批准的基本镜像(包含 Windows Server 或 SQL Server)。开始时,请从位于 Microsoft Azure 门户 Azure web管理平台 的镜像中创建 VM,这些镜像也可以在 Azure 中国市场的Windows Server and SQL Server中找到。

    VM 镜像中的 Windows 操作系统 VHD 应创建为 128 GB 的固定格式的 VHD。如果物理大小小于 128GB,则 VHD 应是稀疏的磁盘。 基本 Windows 和 SQL Server 镜像已满足这些要求,因此请不要更改获取的 VHD 的格式或大小。

  • 如果你在制作 Windows镜像,请安装最新 Windows 修补程序。

    基本镜像包含截至发布日期的最新修补程序。 发布创建的操作系统 VHD 之前,请确保 Windows 更新已运行,并且所有最新的“关键”和“重要”安全更新都已安装。请参阅文档 准备好要上传到 Azure 的 Windows VHD 或 VHDX中"安装 Windows 更新"部分。

  • 如果你在制作 Windows镜像,根据需要执行其他配置和计划任务。如果需要其他配置,请考虑使用在启动时运行的计划任务,以便在部署 VM 之后对它进行任何最终更改:

    让任务在成功执行之后删除自己是最佳做法。

    不应有任何配置依赖于驱动器 C 或 D 之外的驱动器,因为这两个驱动器是仅有的始终保证存在的驱动器。 驱动器 C 是操作系统磁盘,而驱动器 D 是临时的本地磁盘。

制作虚拟机镜像有两种方式。一种是直接在 Azure 平台上部署操作系统虚拟机,安装应用软件并构建镜像;第二种是从用户本地通过 Hyper-v 创建操作系统,安装应用软件后制作 VHD 镜像文件,然后上传 VHD 文件至 Azure 上构建镜像。第一种方式属于 Azure 定制方式,操作相对简单,适合普通的镜像制作;第二种方式属于用户定制操作系统方式,操作相对复杂,适合需要特殊操作系统定制的镜像制作。

为了制作高安全等级的镜像,请参阅 适用于 Azure 市场映像的安全建议

测试中下载的 PowerShell 脚本如果不能执行,可能的原因是由于 Windows 安全隔离导致,可以在脚本文件的属性页中,选择“unblock”,将文件解锁,然后再执行。

2. 构建和测试 Azure 镜像

构建 VHD 文件主要包括以下四种方法,一般可以选取第一种和第三种,相对简单,这两种方法均在 ARM ( Azure 资源管理器)模式下执行,最终我们需要生成后缀为 “.vhd” 的 VM 文件。一些常见的问题解决方法,请参考章节7 VHD 创建中遇到的常见的故障诊断

2.1 从 Azure 上构建 Linux 应用程序镜像

从 Azure 上构建 Linux 应用程序镜像,您应当:

2.1.1 首先在 Azure 平台上创建 Linux 虚拟机,请参阅使用 Azure 门户创建 Linux 虚拟机使用 Azure CLI 创建和管理 Linux VM

  • 一旦登录 Azure 管理平台并选中基本镜像,请根据提示创建虚拟机。在 Azure 平台上创建虚机进行配置的时候,对于“设置”->“存储”选项中的“使用托管的磁盘”,请选择“否”,否则不会生成 VHD 文件。在“存储账号”下,你可以任意选择存储账号存放 VHD 文件。

2.1.2 在 Azure 上创建 Linux 应用程序镜像和 VHD 文件,请参阅文档 使用 CLI 创建 Azure VM 的自定义映像,并注意:

  • 参考文档中,“解除分配 VM 并将其标记为通用化”完成后,VHD 镜像文件已经制作好了,可以在Azure Web 管理页面的资源组或存储账号中查看。 后续测试中,“从映像创建 VM”部分可以在 Azure Web 管理页面操作,这样更为简单。

2.2 从 Azure 外部(本地)构建 Linux 应用程序镜像

从本地构建基于 Azure 的 Linux 应用程序镜像,请参阅文档 有关未认可分发版的信息

如何从镜像创建和测试 Linux 虚拟机,请参阅 使用 Azure CLI 2.0 从自定义磁盘创建 Linux VM

2.3 从 Azure 上构建 Windows 应用程序镜像

从 Azure 上构建 Windows 应用程序镜像,您应当:

2.3.1 首先在Azure 平台上创建 Windows 虚拟机,请参阅 使用 Azure 门户创建 Windows 虚拟机使用 Azure PowerShell 模块创建和管理 Windows VM

  • 一旦登录 Azure 管理平台并选中基本镜像,请根据提示创建虚拟机。在 Azure 平台上创建虚机进行配置的时候,对于“设置”->“存储”选项中的“使用托管的磁盘”,请选择“否”,否则不会生成 VHD 文件。在“存储账号”下,你可以任意选择存储账号存放 VHD 文件。

2.3.2 请注意: 在 Azure 上创建 Windows 应用程序镜像和 VHD 文件,请参阅文档 使用 PowerShell 创建 Azure VM 的自定义映像,请注意:

  • 参考文档中,“解除分配 VM 并将其标记为通用化”需要首先在ARM 模式下登录 Azure(Login-AzureRmAccount -EnvironmentName AzureChinaCloud)再执行,完成后可以在 Azure Web 管理页面的资源组或存储账号中查看 VHD 文件。后续测试中,“从映像创建 VM”部分可以在 Azure Web 管理页面操作,这样更为简单。

2.4 从 Azure 外部(本地)构建 Windows 应用程序镜像

从本地或 Azure 外部构建基于 Azure 的 Windows 应用程序镜像,请参阅文档 准备好要上传到 Azure 的 Windows VHD 或 VHDX。镜像的测试, 请参阅 从托管映像创建 VM。 如何将 VHD 文件上传到 Azure 并测试, 请参阅 上传通用化 VHD 并使用它在 Azure 中创建新 VM, 或参阅文中测试脚本 将通用化 VHD 上传到 Azure 以创建新 VM.

2.5 其它资源

对于 Linux 或 windows 镜像,VHD 上传到 Azure 并创建虚拟机镜像的脚本请参阅 将 VHD 上传到 Azure 并创建新的 VM 的示例脚本

另外,如果需要从其它平台迁移 VHD 到 Azure 平台,请参阅 从 Amazon Web Services (AWS) 和其他平台迁移到 Azure 中的托管磁盘

3. 获得 VM 镜像的认证

为 Azure 市场准备 VM 镜像的下一步是进行认证。

认证工具运行在 Windows 上,它确保 VM 镜像与 Microsoft Azure 兼容,它会验证是否 VHD 满足指南的要求,该工具的输出是一份兼容性报告。

认证工具可以与 Windows 和 Linux VM 一起使用。 它通过 PowerShell 连接到基于 Windows 的 VM,通过 SSH.Net 连接到 Linux VM:

  • 首先,在 Microsoft 下载站点下载认证工具。
  • 打开认证工具,并单击“启动新测试”按钮。
  • 在“测试信息”屏幕中,为测试运行输入名称。
  • 选择 VM 是处于 Linux 还是 Windows 上。 根据所选内容,选择后续选项。
  • 为基于 Linux 或 Windows 的 VM 镜像选择了正确的选项之后,选择“测试连接”以确保 SSH.Net 或 PowerShell 具有可用于测试的有效连接。 建立连接之后,按“下一步”以启动测试。
  • 测试完成时,将收到每个测试元素的结果(通过/失败/警告)。 如果任何测试失败,不会认证镜像。 如果发生这种情况,请查看要求并作出任何必要更改。自动测试后,将通过调查表屏幕要求用户提供有关 VM 镜像的其他输入。 填写这些问题,并选择“下一步”。
  • 最后,除下载调查表答案外,还可下载已执行的测试用例的测试结果和日志文件,并将结果保存在与 VHD 相同的容器中。

4. 设置 VHD 文件的 URI(统一资源标识符)的访问权限

在镜像发布到 Azure 中国市场的时候,一个重要的字段 “操作系统磁盘” 需要填写 VHD 文件所在的 URI,Microsoft 需要在发布和认证过程中访问这些 VHD,这个 URI 必须位于 Azure blob 存储中,因此需要设置适当的访问权限。

4.1 设置镜像 URI 的访问权限

在将 VM 镜像发布到 Azure 中国市场的时候,镜像文件所在的 Azure 存储容器 属性应该设置为“Blob”或“容器”属性,否则将会出现“镜像不存在”的错误。

如果你想更精细地定义镜像 URI 的访问权限,请参考下一节(4.2)的使用 SAS URI的方法。

4.2 为 VM 镜像获取共享访问签名(SAS) URI

如果您想更容易地设置 VHD 的 URI 访问权限,请参考上一节(4.1)。 如果您选择使用 SAS URI,请应符合以下要求,注意以下说明仅适用于非托管磁盘,这是唯一支持的类型。

  • 为 VHD 生成共享访问签名 URI 时,“列出”和“读取”权限已足够使用。 请不要提供“写入”或“删除”访问权限。
  • 访问的持续时间应至少是三 (3) 周,从创建共享访问签名 URI 时算起。为了保证 UTC 时间,请选择当前日期的前一天。 例如,如果当前时间是 2014 年 10 月 6 日,则选择 10/5/2014。
  • 只有当镜像通过发布平台被发布到 Azure 中国市场的时候,访问权限才有效。
  • 为了为 Azure 市场生成 VHD的 SAS URL,请参阅存储资源管理器(预览版)入门使用 SAS 附加存储帐户部分 和 使用 Azure 存储资源管理器将对象传入/传出 Azure Blob 存储管理访问策略部分。

5. 虚拟机预发布的测试

“构建和测试虚拟机镜像”完成后,还不能直接发布到 Azure 市场,还需要在(经典)模式(相对于“Azure 资源管理器”模式)下对 VHD 镜像文件进行测试。这个测试需要用到(经典)存储账号,在 PowerShell 下进行。

  • 确保 VHD 文件位于(经典)存储账号中。如果您的 VHD 文件没有位于(经典)存储账号中,请登录 Azure Web管理 平台,手动创建用于测试的(经典)存储账号。请下载 PowerShell 脚本 将文件从存储账号拷贝到经典存储账号,修改参数后运行,将 VHD 文件从现有存储账号拷贝到(经典)存储账号。请注意脚本中的 VHD 源地址所在的存储容器的访问策略应该为“Blob”或“容器”。除了 PowerShell ,也可以使用 AzCopy 等工具进行拷贝,如 使用 Windows 上的 AzCopy 传输数据

  • (经典)模式下登录到 Azure 平台。 PowerShell 下输入如下指令:

    • Add-AzureAccount -Environment AzureChinaCloud
    • Get-AzureSubscription
    • Select-AzureSubscription -SubscriptionID #Select the subscription for testing.
  • 使用PowerShell脚本对 VHD 文件进行测试。下载PowerShell脚本 采用经典方式创建虚拟机并运行,然后查看虚拟机创建是否成功。脚本输入参数中,“vhdUri”为VHD所在url地址,“storageAccountName”和“subid”为创建虚拟机所在的(经典)存储账号(可以用vhdUri的账号)和订阅ID。

  • 测试完成后,测试中创建的虚拟机所在的资源组需要手动从 Azure 管理平台删除。

    [AZURE.NOTE] 注意: VHD 发布到 Azure 市场前,VHD 镜像文件所在的容器访问策略一定要设置为 “Blob 或 容器”,这样 VHD 镜像才能够被发布到 Azure 市场。

6. 镜像发布前的检查单

在发布镜像提交到 Azure 市场之前,请确保以下检查单全部通过:

产品镜像要求

产品镜像必须满足如下要求:

  • 适用于生产环境,Azure 市场原则上不接受测试版本产品上架
  • 镜像为自包含镜像,所依赖的软件组件,包括客户端应均包括在此镜像中
  • 不包含任何已知的缺陷,恶意软件和病毒
  • 镜像必须经过严格内测,确保镜像可用性
  • 对于 Linux 镜像,默认禁止 root 登录
  • 对于 Linux 镜像,镜像中不包含任何用户认证密钥信息

产品描述要求

提供至少满足镜像发布表单的描述信息,具体信息见参见 Azure 市场虚拟机镜像发布指南。内容主要包括但不限于:

  • 产品信息(SKU,服务商名称,产品名称,短描述,完整描述)
  • 产品logo:2张固定大小像素的png格式的图片(115x115, 255x115)
  • 产品图片:此类图片用于产品说明中,可以是产品架构图或产品说明图片等,像素大小要求 (533x324)
  • 镜像 VHD 文件地址:发布 VHD 镜像文件所在的 Azure Blob 的 url 地址
  • 产品售后服务(客服联系方式,时间)

7. VHD 创建中遇到的常见的故障诊断