练习 - 使用 Azure 资源管理器标记和参数文件

已完成

在本练习中,你将添加标记以帮助组织和跟踪 Microsoft Azure 资源。 你还可以使用 Azure 资源管理器 (ARM) 模板参数文件支持每个部署的不同参数配置。

本练习使用适用于 Visual Studio Code 的 Azure 资源管理器工具。 请务必在 Visual Studio Code 中安装此扩展。

创建标记来跟踪资源部署环境和项目

首先创建一个要在模板中作为资源标记使用的参数。

  1. 在 Visual Studio Code 中,将光标放在 azuredeploy.json 文件中 storageSKU 参数的右大括号后面。 添加一个逗号,并按 Enter

  2. 键入 par。 将显示相关代码片段的列表。

  3. 选择 arm-param。 请注意,该操作会将泛型参数添加到模板。 如下代码所示:

    "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
    
  4. parameter1 更改为 resourceTags 并将 "type": 的值更改为 object。 请注意,参数可以是 string、secureString、int、bool、object、secureObject 和 array 数据类型。 此模块的摘要中提供了指向这些参数类型的示例语法的链接。

  5. 添加一个名为 defaultValue: 的特性,并将其值设置为 {"Environment":"Dev", "Project":"Tutorial"}。

    参数块应类似于以下代码:

    "parameters": {
        "storagePrefix": {
            "type": "string",
            "minLength": 3,
            "maxLength": 11
        },
        "storageSKU": {
            "type": "string",
            "defaultValue": "Standard_LRS",
            "allowedValues": [
                "Standard_LRS",
                "Standard_GRS",
                "Standard_RAGRS",
                "Standard_ZRS",
                "Premium_LRS",
                "Premium_ZRS",
                "Standard_GZRS",
                "Standard_RAGZRS"
            ]
        },
        "resourceTags": {
        "type": "object",
        "defaultValue": {
            "Environment": "Dev",
            "Project": "Tutorial"
            }
        }
    },
    
  6. 使用此参数来标记存储帐户资源。 更改资源定义中的 tags: 特性:

    "tags": "[parameters('resourceTags')]",
    
  7. 你的文件应如下所示:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
           "storagePrefix": {
               "type": "string",
               "minLength": 3,
               "maxLength": 11
           },
            "storageSKU": {
                "type": "string",
                "defaultValue": "Standard_LRS",
                "allowedValues": [
                    "Standard_LRS",
                    "Standard_GRS",
                    "Standard_RAGRS",
                    "Standard_ZRS",
                    "Premium_LRS",
                    "Premium_ZRS",
                    "Standard_GZRS",
                    "Standard_RAGZRS"
                ]
            },
            "resourceTags": {
            "type": "object",
            "defaultValue": {
                "Environment": "Dev",
                "Project": "Tutorial"
            }
        }
       },
        "functions": [],
        "variables": {
        "uniqueStorageName": "[toLower(concat(parameters('storagePrefix'),uniqueString(resourceGroup().id)))]"
      },
        "resources": [{
            "name": "[variables('uniqueStorageName')]",
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "tags": "[parameters('resourceTags')]",
            "location": "[resourceGroup().location]",
            "kind": "StorageV2",
            "sku": {
             "name": "[parameters('storageSKU')]"
           }
        }],
        "outputs": {}
    }
    
  8. 保存文件。

使用已更新的标记部署 ARM 模板

  • 将已更新的 ARM 模板部署到 Azure。 请务必使用以前使用过的相同 storagePrefix

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="updateTags-"$today
    
    az deployment group create \
        --name $DeploymentName \
        --template-file $templateFile \
        --parameters storagePrefix={your-Prefix} storageSKU=Standard_LRS
    
  • 将已更新的 ARM 模板部署到 Azure。 请务必使用以前使用过的相同 storagePrefix

    $templateFile = "azuredeploy.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="updateTags-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storagePrefix {your storagePrefix} `
      -storageSKU Standard_LRS
    

验证部署中是否有新标记

  1. 在 Azure 中选择 [沙盒资源组名称] 资源组,然后选择你部署的存储帐户。

  2. 请注意“Environment :Dev”和“Project :Tutorial”标记:

    Screenshot of the Azure portal that shows the selected tags in the Storage account Overview page.

使用参数文件

目前,每次部署此模板时都需要填充三个参数。 模板的每个用户都可以创建文件来保存其参数值。 此处,你将创建一个用于模板的参数文件。

  1. 在 Visual Studio Code 中,创建另一个文件。 将其命名为 azuredeploy.parameters.dev.json。

  2. 在此文件中,将需要输入的模板参数的值添加到开发环境的模板中。 更改标记值以查看部署是否进行了更改。 例如,可以将 projectName 更改为“Learn”:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storagePrefix": {
          "value": "{unique-prefix}"
        },
        "storageSKU": {
          "value": "Standard_LRS"
        },
        "resourceTags": {
          "value": {
            "Environment": "Dev",
            "Project": "Learn"
          }
        }
      }
    }
    
  3. 请确保将 {unique-prefix} 替换为唯一前缀。

  4. 保存文件。

使用参数文件部署模板

在本部分中,你将部署 ARM 模板,指定要使用的参数文件。

  1. 在 Visual Studio Code 终端中,运行以下 Azure CLI 命令:

    templateFile="azuredeploy.json"
    devParameterFile="azuredeploy.parameters.dev.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addParameterFile-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters $devParameterFile
    
  2. 检查 Azure 以确保成功部署,以及确保标记值已更改:

    Screenshot of the Azure portal that shows the updated tag values in the Storage account Overview page.

  3. 难点在于,创建生产环境的参数文件。 运行命令以部署到生产环境时,请更改参数文件路径。

  1. 在 Visual Studio Code 终端中,运行以下 Azure PowerShell 命令:

    $templateFile = "azuredeploy.json"
    $parameterFile="azuredeploy.parameters.dev.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addParameterFile-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -TemplateParameterFile $parameterFile
    
  2. 检查 Azure 以确保成功部署,以及确保标记值已更改:

    Screenshot of the Azure portal that shows the updated tag values in the Storage account Overview page.

  3. 难点在于,创建生产环境的参数文件。 运行命令以部署到生产环境时,请更改参数文件路径。