创建资源管理器参数文件

可以使用包含参数值的 JSON 文件,而不是在脚本中将参数作为内联值传递。 本文介绍如何创建与 JSON 模板一起使用的参数文件。

提示

我们建议使用 Bicep,因为它提供与 ARM 模板相同的功能,并且该语法更易于使用。 若要了解详细信息,请参阅 参数文件

参数文件

参数文件使用以下格式:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "<first-parameter-name>": {
      "value": "<first-value>"
    },
    "<second-parameter-name>": {
      "value": "<second-value>"
    }
  }
}

值得注意的是,参数文件将参数值另存为纯文本。 出于安全原因,不建议对敏感值(如密码)使用此方法。 如果必须传递带有敏感值的参数,请将值保存在密钥保管库中。 然后,在参数文件中,包括对密钥保管库的引用。 在部署期间,敏感值被安全地检索。 有关详细信息,请参阅 在部署期间使用 Azure Key Vault 传递安全参数值

以下参数文件包括纯文本值和存储在密钥保管库中的敏感值。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "<first-parameter-name>": {
      "value": "<first-value>"
    },
    "<second-parameter-name>": {
      "reference": {
        "keyVault": {
          "id": "<resource-id-key-vault>"
        },
        "secretName": "<secret-name>"
      }
    }
  }
}

有关使用密钥保管库中的值的详细信息,请参阅 使用 Azure Key Vault 在部署期间传递安全参数值

定义参数值

若要确定如何定义参数名称和值,请打开 JSON 模板并查看该 parameters 部分。 以下示例显示了 JSON 模板的参数。

"parameters": {
  "storagePrefix": {
    "type": "string",
    "maxLength": 11
  },
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
    "Standard_LRS",
    "Standard_GRS",
    "Premium_LRS"
    ]
  }
}

在参数文件中,要注意的第一个详细信息是每个参数的名称。 参数文件中的参数名称必须与模板中的参数名称匹配。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
    },
    "storageAccountType": {
    }
  }
}

注意参数类型。 参数文件中的参数类型必须与模板使用相同的类型。 在本例中,两个参数类型都是字符串。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": ""
    },
    "storageAccountType": {
      "value": ""
    }
  }
}

检查模板中是否存在默认值的参数。 如果参数具有默认值,则可以在参数文件中提供一个值,但这不是必需的。 参数文件值替代模板的默认值。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "" // This value must be provided.
    },
    "storageAccountType": {
      "value": "" // This value is optional. Template will use default value if not provided.
    }
  }
}

检查模板允许的值和任何限制,例如最大长度。 这些值指定可为参数提供的值的范围。 在此示例中, storagePrefix 最多可以有 11 个字符,并且 storageAccountType 必须指定允许的值。

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

备注

参数文件只能包含模板中定义的参数的值。 如果参数文件包含与模板参数不匹配的额外参数,则会收到错误。

参数类型格式

下面的示例显示了不同参数类型的格式:字符串、整数、布尔值、数组和对象。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "exampleString": {
      "value": "test string"
    },
    "exampleInt": {
      "value": 4
    },
    "exampleBool": {
      "value": true
    },
    "exampleArray": {
      "value": [
        "value 1",
        "value 2"
      ]
    },
    "exampleObject": {
      "value": {
        "property1": "value1",
        "property2": "value2"
      }
    }
  }
}

使用参数文件部署模板

在 Azure CLI 中,可以使用 @ 和参数文件名来传递本地参数文件。 例如,@storage.parameters.json

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters @storage.parameters.json

有关详细信息,请参阅使用 ARM 模板和 Azure CLI 部署资源

在 Azure PowerShell 中,使用 TemplateParameterFile 参数传递本地参数文件。

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile C:\MyTemplates\storage.json `
  -TemplateParameterFile C:\MyTemplates\storage.parameters.json

有关详细信息,请参阅 使用 ARM 模板和 Azure PowerShell 部署资源

备注

不能在门户中将参数文件与自定义模板边栏选项卡一起使用。

提示

如果在 Visual Studio 中使用 Azure 资源组项目,请确保参数文件的 “生成操作” 设置为 “内容”

文件名

参数文件的常规命名约定是将 参数 包含在模板名称中。 例如,如果模板命名 为azuredeploy.json,则参数文件 命名为azuredeploy.parameters.json。 此命名约定可帮助你查看模板与参数之间的连接。

若要部署到不同的环境,请创建多个参数文件。 命名参数文件时,请标识其使用,例如开发和生产。 例如,使用 azuredeploy.parameters-dev.jsonazuredeploy.parameters-prod.json 部署资源。

参数优先级

可以在同一部署作中使用内联参数和本地参数文件。 例如,可以在本地参数文件中指定一些值,并在部署期间内联添加其他值。 如果在本地参数文件和内联文件中为参数提供值,则内联值优先。

可以通过向文件提供 URI 来使用外部参数文件。 使用外部参数文件时,不能通过内联或本地文件传递其他值。 将忽略所有内联参数。 提供外部文件中的所有参数值。

参数名冲突

如果模板包含与 PowerShell 命令中的其中一个参数同名的参数,则 PowerShell 会将模板中的参数与后缀 FromTemplate一起显示。 例如,模板中命名 ResourceGroupName 的参数与 ResourceGroupNameNew-AzResourceGroupDeployment cmdlet 中的参数冲突。 系统会提示你提供 ResourceGroupNameFromTemplate 的值。 为了避免这种混淆,请使用未用于部署命令的参数名称。

后续步骤