你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 ARM 模板中使用条件

了解如何根据 Azure 资源管理器模板(ARM 模板)中的条件部署 Azure 资源。

设置资源部署顺序教程介绍如何创建虚拟机、虚拟网络以及其他一些依赖资源(包括存储帐户)。 无需每次都创建新的存储帐户,可让用户选择是创建新的存储帐户还是使用现有的存储帐户。 为实现此目的,需定义附加的参数。 如果参数值为“new”,则创建新存储帐户。 否则,将使用具有所提供名称的现有存储帐户。

资源管理器模板使用条件关系图

本教程涵盖以下任务:

  • 打开快速入门模板
  • 修改模板
  • 部署模板
  • 清理资源

本教程仅介绍使用条件的基本方案。 有关详细信息,请参阅:

有关介绍条件的 Learn 模块,请参阅使用高级 ARM 模板功能管理复杂云部署

如果还没有 Azure 订阅,可以在开始前创建一个免费帐户

先决条件

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

打开快速入门模板

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. 有六个通过此模板定义的资源:

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

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

修改模板

对现有模板进行两项更改:

  • 添加存储帐户名称参数。 用户可以指定新的存储帐户名称或现有的存储帐户名称。
  • 添加名为 newOrExisting 的新参数。 部署使用此参数来确定是要创建新存储帐户还是使用现有的存储帐户。

下面是进行更改的过程:

  1. 在 Visual Studio Code 中打开 azuredeploy.json

  2. 在整个模板中,将三个 variables('storageAccountName') 替换为 parameters('storageAccountName')

  3. 删除以下变量定义:

    突出显示需要删除的变量定义的屏幕截图。

  4. 将以下两个参数添加到 parameters 节的开头:

    "storageAccountName": {
      "type": "string"
    },
    "newOrExisting": {
      "type": "string",
      "allowedValues": [
        "new",
        "existing"
      ]
    },
    

    在 Visual Studio Code 中按“Alt+Shift+F”,设置模板格式。

    更新的参数定义如下所示:

    在资源管理器中使用条件

  5. 将以下行添加到存储帐户定义的开头。

    "condition": "[equals(parameters('newOrExisting'),'new')]",
    

    条件会检查参数 newOrExisting 的值。 如果参数值为 new,则部署将创建存储帐户。

    更新的存储帐户定义如下所示:

    显示更新的存储帐户定义的屏幕截图。

  6. 使用以下值更新虚拟机资源定义的 storageUri 属性:

    "storageUri": "[format('https://{0}.blob.core.windows.net', parameters('storageAccountName'))]"
    

    如果使用另一资源组中的现有存储帐户,则此更改是必需的。

  7. 保存更改。

部署模板

  1. 登录到 Cloud Shell

  2. 通过在左上角选择“PowerShell”或“Bash”(适用于 CLI)来选择你喜欢使用的环境 。 进行切换时,需重启 shell。

    Azure 门户 - Cloud Shell - 上传文件

  3. 依次选择“上传/下载文件”、“上传”。 请参阅上面的屏幕截图。 选择在上一部分保存的文件。 上传文件后,可以使用 ls 命令和 cat 命令验证是否已成功上传文件。

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

    重要

    存储帐户名称在 Azure 中必须是唯一的。 该名称只能包含小写字母或数字。 其长度不能超过 24 个字符。 存储帐户名称是追加了“store”的项目名称。 请确保项目名称和生成的存储帐户名称符合存储帐户名称要求。

    $projectName = Read-Host -Prompt "Enter a project name that is used to generate resource group name and resource names"
    $newOrExisting = Read-Host -Prompt "Create new or use existing (Enter new or existing)"
    $location = Read-Host -Prompt "Enter the Azure location (i.e. centralus)"
    $vmAdmin = Read-Host -Prompt "Enter the admin username"
    $vmPassword = Read-Host -Prompt "Enter the admin password" -AsSecureString
    $dnsLabelPrefix = Read-Host -Prompt "Enter the DNS Label prefix"
    
    $resourceGroupName = "${projectName}rg"
    $storageAccountName = "${projectName}store"
    
    New-AzResourceGroup -Name $resourceGroupName -Location $location
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -adminUsername $vmAdmin `
        -adminPassword $vmPassword `
        -dnsLabelPrefix $dnsLabelPrefix `
        -storageAccountName $storageAccountName `
        -newOrExisting $newOrExisting `
        -TemplateFile "$HOME/azuredeploy.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    注意

    如果 newOrExistingnew,但具有指定存储帐户名称的存储帐户已存在,则部署将会失败。

通过将 newOrExisting 设置为“existing”并指定现有存储帐户来尝试进行另一个部署。 若要提前创建存储帐户,请参阅创建存储帐户

清理资源

不再需要 Azure 资源时,请通过删除资源组来清理部署的资源。 若要删除资源组,请选择“试用”以打开 Cloud Shell。 若要粘贴 PowerShell 脚本,请右键单击 shell 窗格,然后选择“粘贴”。

$projectName = Read-Host -Prompt "Enter the same project name you used in the last procedure"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

后续步骤

在本教程中,我们开发了一个允许用户选择创建新存储帐户或使用现有存储帐户的模板。 若要了解如何从 Azure Key Vault 检索机密并在模板部署中使用这些机密作为密码,请参阅: