使用 Azure 资源管理器模板标记和参数文件维护多个 Azure 部署

已完成

部署到多个 Azure 环境时,需要使用 Azure 资源管理器 (ARM) 模板的两个功能。 这两个功能分别是资源标记和 ARM 模板参数文件。

在环境中添加更多资源时,你很快就会发现需要一种方法来标识这些资源的用途。 出于此目的,资源提供了 tags: 特性。 当部署到更多环境时,需要一种有效的方法来跟踪输入参数。 ARM 模板可以使用参数文件管理每个部署环境的参数。

什么是 Azure 资源标记?

可以对资源进行标记,以添加有助于标识其用途的值。 例如,可以添加列出资源所属的环境和项目的标记。 或者可以添加标识成本中心或拥有资源的团队的标记。 添加对你的组织有意义的任何值。

标记值将显示在该 Azure 资源的概述页面和成本报表中。

如何创建 Azure 资源标记?

每个资源都有一个 tags: 特性。 到目前为止,你一直在为存储帐户的标记使用默认 displayName

"tags": {
          "displayName": "[parameters('storageName')]"
        },

若要让此特性更有用,可以定义一个提供更多信息的参数,然后在 tags: 特性中使用该参数。 例如,可以创建一个参数来保存名为 resourceTags 的对象:

"resourceTags": {
    "type": "object",
    "defaultValue": {
        "Environment": "Dev",
        "Project": "Inventory"
        }
    }

在此处,你创建了一个对象来保存环境名称和项目名称的值,但你可以定义所需的任何内容。

然后为用于开发环境和库存项目的任何资源使用该参数,例如存储帐户。

"resources": [{
        "name": "[variables('uniqueStorageName')]",
        "type": "Microsoft.Storage/storageAccounts",
        "apiVersion": "2019-06-01",
        "tags": "[parameters('resourceTags')]",
        ...
    }],

什么是 ARM 模板参数文件?

ARM 模板参数文件保存在执行模板时将传递给 ARM 模板的值。 通过为要部署 ARM 模板的每个环境使用参数文件,可确保为该特定环境设置正确的参数。 此外,请确保可以在源代码管理中跟踪这些参数值的历史记录和维护信息。

如何使用 ARM 模板参数文件?

ARM 模板参数文件是保存参数值的 JSON 文件。 例如,对于目前在 ARM 模板中使用的参数,可以创建模板参数文件,如下所示:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "storagePrefix": {
        "value": "storage"
      },
      "storageSKU": {
        "value": "Standard_LRS"
      },
      "resourceTags": {
        "value": {
          "Environment": "Dev",
          "Project": "Learn"
        }
      }
    }
  }

然后,可以为每个环境创建与此类似的文件。 例如,这些文件的名字可能为 azuredeploy.parameters.dev.json 和 azuredeploy.parameters.prod.json,它们保存参数的不同值。

若要使用参数文件部署 ARM 模板,请在部署命令中指定参数文件的路径。 在 Azure CLI 中,可使用 --parameters {path to parameter file}。 在 PowerShell 中,可使用 -TemplateParameterFile {path to parameter file}

templateFile="{path-to-the-template-file}"
devParameterFile="{path-to-azuredeploy.parameters.dev.json}"
az group create \
  --name myResourceGroupDev \
  --location "East US"
az deployment group create \
  --name devenvironment \
  --resource-group myResourceGroupDev \
  --template-file $templateFile \
  --parameters $devParameterFile