教程:使用参数文件部署 Azure 资源管理器 Bicep 文件

本教程介绍如何使用参数文件存储在部署过程中传递的值。 在以前的教程中,我们通过部署命令使用了内联参数。 此方法适用于测试 Bicep 文件,但在自动进行部署时,为环境传递一组值可能会更容易。 参数文件可以方便你针对特定的环境将参数值打包。 使用部署 JSON 模板时所用的相同 JSON 参数文件。 在本教程中,我们将针对开发和生产环境创建参数文件。 完成该过程需要大约 12 分钟

备注

本文包含 Bicep 示例。 Bicep 目前为预览版。 有关详细信息,请参阅 Bicep 项目

先决条件

建议完成有关标记的教程,但这不是必需的。

必须有包含 Bicep 扩展的 Visual Studio Code,以及 Azure PowerShell 或 Azure CLI。 有关详细信息,请参阅 Bicep 工具

查看 Bicep 文件

Bicep 文件包含许多可以在部署期间提供的参数。 在上一篇教程结束时,Bicep 文件如下所示:

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Premium_LRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location
param appServicePlanName string = 'exampleplan'

@minLength(2)
@description('Base name of the resource such as web app name and app service plan.')
param webAppName string

@description('The Runtime stack of current web app.')
param linuxFxVersion string = 'php|7.0'

param resourceTags object = {
  Environment: 'Dev'
  Project: 'Tutorial'
}

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
var webAppPortalName = '${webAppName}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2019-04-01' = {
  name: uniqueStorageName
  location: location
  tags: resourceTags
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

resource appPlan 'Microsoft.Web/serverfarms@2016-09-01' = {
  name: appServicePlanName
  location: location
  tags: resourceTags
  sku: {
    name: 'B1'
    tier: 'Basic'
    size: 'B1'
    family: 'B'
    capacity: 1
  }
  kind: 'linux'
  properties: {
    perSiteScaling: false
    reserved: true
    targetWorkerCount: 0
    targetWorkerSizeId: 0
  }
}

resource site 'Microsoft.Web/sites@2016-08-01' = {
  name: webAppPortalName
  location: location
  tags: resourceTags
  kind: 'app'
  properties: {
    serverFarmId: appPlan.id
    siteConfig: {
      linuxFxVersion: linuxFxVersion
    }
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

此 Bicep 文件可正常运行,但现在你希望能够轻松管理为 Bicep 文件传入的参数。

添加参数文件

参数文件是结构类似于 JSON 模板的 JSON 文件。 在文件中,我们提供需要在部署过程中传入的参数值。

在参数文件中,为 Bicep 文件中的参数提供值。 参数文件中每个参数的名称必须与 Bicep 文件中的参数名称相匹配。 该名称不区分大小写,但为了方便查看匹配的值,我们建议匹配 Bicep 文件中的大小写。

无需为每个参数提供值。 如果未指定的参数具有默认值,则在部署过程中将使用该值。 如果参数没有默认值,并且未在参数文件中指定值,系统会在部署过程中提示你提供值。

不能在参数文件中指定与 Bicep 文件中的参数名称不匹配的参数名称。 如果提供了未知参数,会收到错误。

在 Visual Studio Code 中,创建包含以下内容的新文件。 使用名称 azuredeploy.parameters.dev.json 保存文件。

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

此文件是用于开发环境的参数文件。 请注意,它将“Standard_LRS”用于存储帐户,使用“dev”前缀为资源命名,并将 Environment 标记设置为“Dev” 。

同样,创建包含以下内容的新文件。 使用名称 azuredeploy.parameters.prod.json 保存文件。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "contosodata"
    },
    "storageSKU": {
      "value": "Standard_GRS"
    },
    "appServicePlanName": {
      "value": "contosoplan"
    },
    "webAppName": {
      "value": "contosowebapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Production",
        "Project": "Tutorial"
      }
    }
  }
}

此文件是用于生产环境的参数文件。 请注意,它将“Standard_GRS”用于存储帐户,使用“contoso”前缀为资源命名,并将 Environment 标记设置为“Production” 。 在实际生产环境中,还需要将应用服务与非免费版 SKU 配合使用,但在本教程中,我们将继续使用该免费版 SKU。

部署 Bicep 文件

使用 Azure CLI 或 Azure PowerShell 部署 Bicep 文件。

在本教程中,让我们创建两个新的资源组。 一个用于开发环境,一个用于生产环境。

对于模板和参数变量,请将 {path-to-the-bicep-file}{path-to-azuredeploy.parameters.dev.json}{path-to-azuredeploy.parameters.prod.json} 和大括号 {} 替换为你的 Bicep 文件和参数文件路径。

首先,我们部署到开发环境。

若要运行此部署 cmdlet,你必须具有 Azure PowerShell 的最新版本

$bicepFile = "{path-to-the-bicep-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
  -Name myResourceGroupDev `
  -Location "China East"
New-AzResourceGroupDeployment `
  -Name devenvironment `
  -ResourceGroupName myResourceGroupDev `
  -TemplateFile $bicepFile `
  -TemplateParameterFile $parameterFile

现在,我们部署到生产环境。

$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
  -Name myResourceGroupProd `
  -Location "China North"
New-AzResourceGroupDeployment `
  -Name prodenvironment `
  -ResourceGroupName myResourceGroupProd `
  -TemplateFile $bicepFile `
  -TemplateParameterFile $parameterFile

备注

如果部署失败,请使用 verbose 开关获取有关正在创建的资源的信息。 使用 debug 开关获取调试的详细信息。

验证部署

可以通过在 Azure 门户中浏览资源组来验证部署。

  1. 登录 Azure 门户
  2. 在左侧菜单中选择“资源组”。
  3. 可以看到在本教程中部署的两个新资源组。
  4. 选择任一资源组,查看部署的资源。 请注意,这些资源与我们在参数文件中为该环境指定的值匹配。

清理资源

  1. 在 Azure 门户上的左侧菜单中选择“资源组” 。
  2. 在“按名称筛选”字段中输入资源组名称。
  3. 选择资源组名称。
  4. 在顶部菜单中选择“删除资源组”。

后续步骤

在本教程中,你使用参数文件部署了 Bicep 文件。 下一篇教程将介绍如何模块化 Bicep 文件。