教程:创建包含所依赖资源的 ARM 模板

了解如何创建 Azure 资源管理器模板(ARM 模板)以部署多个资源和配置部署顺序。 创建模板后,使用 Azure 本地 Shell 从本地计算机部署模板。

本教程介绍如何创建存储帐户、虚拟机、虚拟网络以及一些其他的依赖资源。 某些资源的部署依赖于另一资源的存在。 例如,创建虚拟机的前提是其存储帐户和网络接口存在。 可通过将一个资源标记为依赖于其他资源来定义此关系。 Resource Manager 将评估资源之间的依赖关系,并根据其依赖顺序进行部署。 如果资源互不依赖,资源管理器将以并行方式部署资源。 有关详细信息,请参阅在 ARM 模板中定义部署资源的顺序

Diagram that shows the deployment order of dependent resources in a Resource Manager template.

本教程涵盖以下任务:

  • 打开快速入门模板
  • 浏览模板
  • 部署模板

如果没有 Azure 订阅,请在开始前创建试用版订阅

先决条件

若要完成本文,需要做好以下准备:

  • 包含资源管理器工具扩展的 Visual Studio Code。 请参阅快速入门:使用 Visual Studio Code 创建 ARM 模板

  • 若要提高安全性,请使用为虚拟机管理员帐户生成的密码。 可以在 PowerShell 或 CLI 中使用 Azure 本地 Shell 运行以下命令:

    openssl rand -base64 32
    

    若要了解详细信息,请运行 man openssl rand 打开手册页。

    Azure Key Vault 旨在保护加密密钥和其他机密。 有关详细信息,请参阅教程:在 ARM 模板部署中集成 Azure Key Vault。 我们还建议你每三个月更新一次密码。

打开快速入门模板

Azure 快速入门模板是 ARM 模板的存储库。 无需从头开始创建模板,只需找到一个示例模板并对其自定义即可。 本教程中使用的模板称为部署简单的 Windows VM

  1. 在 Visual Studio Code 中,选择“文件”>“打开文件”。

  2. 在“文件名”中粘贴以下 URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. 选择“打开”以打开该文件。

  4. 选择“文件”>“另存为”,将该文件的副本保存到名为 azuredeploy.json 的本地计算机。

浏览模板

浏览此部分的模板时,请尝试回答以下问题:

  • 在此模板中定义了多少 Azure 资源?
  • 其中一个资源是 Azure 存储帐户。 该定义是否与上一教程中使用的定义类似?
  • 对于此模板中定义的资源,能否找到模板参考?
  • 能否找到资源的依赖项?
  1. 在 Visual Studio Code 中折叠元素,直到只能在 resources 中看到第一级元素和第二级元素:

    Screenshot of Visual Studio Code displaying an ARM template with collapsed elements.

    有六个通过此模板定义的资源:

    • Microsoft.Storage/storageAccounts
    • Microsoft.Network/publicIPAddresses
    • Microsoft.Network/networkSecurityGroups
    • Microsoft.Network/virtualNetworks
    • Microsoft.Network/networkInterfaces
    • Microsoft.Compute/virtualMachines

    在自定义模板之前查看模板参考会很有帮助。

  2. 展开第一个资源。 它是一个存储帐户。

    Screenshot of Visual Studio Code showing the storage account definition in an ARM template.

  3. 展开第二个资源。 资源类型为 Microsoft.Network/publicIPAddresses

    Screenshot of Visual Studio Code showing the public IP address definition in an ARM template.

  4. 展开第三个资源。 资源类型为 Microsoft.Network/networkSecurityGroups

    Screenshot of Visual Studio Code showing the network security group definition in an ARM template.

  5. 展开第四个资源。 资源类型为 Microsoft.Network/virtualNetworks

    Screenshot of Visual Studio Code showing the virtual network definition with dependsOn element in an ARM template.

    使用 dependsOn 元素可将一个资源定义为与一个或多个资源相依赖。 此资源依赖于另一个资源:

    • Microsoft.Network/networkSecurityGroups
  6. 展开第五个资源。 资源类型为 Microsoft.Network/networkInterfaces。 此资源依赖于两个其他的资源:

    • Microsoft.Network/publicIPAddresses
    • Microsoft.Network/virtualNetworks
  7. 展开第六个资源。 此资源为虚拟机。 它依赖于两个其他的资源:

    • Microsoft.Storage/storageAccounts
    • Microsoft.Network/networkInterfaces

下图演示了此模板的资源和依赖项信息:

Diagram that shows the dependency relationships between resources in an ARM template displayed in Visual Studio Code.

指定依赖项可以让资源管理器有效地部署此解决方案。 它以并行方式部署存储帐户、公共 IP 地址和虚拟网络,因为这些没有依赖项。 部署公共 IP 地址和虚拟网络资源以后,会创建网络接口。 所有其他的资源都部署以后,资源管理器会部署虚拟机。

部署模板

  1. 检查并验证先前在教程中保存的模板。 文件名为 azuredeploy.json。

  2. 运行以下 PowerShell 脚本以部署该模板。

    echo "Enter a project name that is used to generate resource group name:" &&
    read projectName &&
    echo "Enter the location (i.e. chinaeast):" &&
    read location &&
    echo "Enter the virtual machine admin username:" &&
    read adminUsername &&
    echo "Enter the DNS label prefix:" &&
    read dnsLabelPrefix &&
    resourceGroupName="${projectName}rg" &&
    az group create --name $resourceGroupName --location $location &&
    az deployment group create --resource-group $resourceGroupName --template-file "$HOME/azuredeploy.json" --parameters adminUsername=$adminUsername dnsLabelPrefix=$dnsLabelPrefix
    
  3. 通过 RDP 连接到虚拟机,验证虚拟机是否已成功创建。

清理资源

不再需要 Azure 资源时,请通过删除资源组来清理部署的资源。

  1. 在 Azure 门户上的左侧菜单中选择“资源组” 。
  2. 在“按名称筛选”字段中输入资源组名称。
  3. 选择资源组名称。 应会看到,该资源组中总共有六个资源。
  4. 在顶部菜单中选择“删除资源组”。

后续步骤

本教程介绍如何通过开发和部署模板来创建虚拟机、虚拟网络和依赖资源。 若要了解如何使用部署脚本来执行部署前/后操作,请参阅: