快速入门:使用 Bicep 创建和部署模板规范

本快速入门介绍如何使用 Bicep 文件创建和部署模板规范。 模板规范将部署到资源组,使组织中的人员可以在 Azure 中部署资源。 使用模板规范可以共享部署模板,而无需为用户授予更改 Bicep 文件的访问权限。 此模板规范示例使用 Bicep 文件来部署存储帐户。

当你创建模板规范时,Bicep 文件将转译为 JavaScript 对象表示法 (JSON)。 模板规范使用 JSON 部署 Azure 资源。 目前无法使用 Azure 门户来导入 Bicep 文件和创建模板规范资源。

先决条件

创建 Bicep 文件

可以从本地 Bicep 文件创建模板规范。 复制以下示例并将其作为 main.bicep 保存到计算机上。 这些示例使用路径 C:\templates\main.bicep。 你可以使用不同的路径,但需要更改命令。

“PowerShell”和“CLI”选项卡中使用了以下 Bicep 文件。 “Bicep 文件”选项卡使用结合了 Bicep 和 JSON 的不同模板来创建和部署模板规范。

@allowed([
  'Premium_LRS'
  'Standard_GRS'
  'Standard_LRS'
  'Standard_RAGRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountNameOutput string = storageAccount.name

创建模板规格

模板规格是名为 Microsoft.Resources/templateSpecs 的资源类型。 若要创建模板规范,请使用 Azure CLI、Azure PowerShell 或 Bicep 文件。

此示例使用资源组名称 templateSpecRG。 你可以使用不同的名称,但需要更改命令。

  1. 创建新的资源组以包含模板规格。

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location chinanorth2
    
  2. 在该资源组中创建模板规格。 将新的模板规格命名为 storageSpec。

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "1.0" `
      -ResourceGroupName templateSpecRG `
      -Location chinanorth2 `
      -TemplateFile "C:\templates\main.bicep"
    

部署模板规格

使用模板规范部署存储帐户。 此示例使用资源组名称 storageRG。 你可以使用不同的名称,但需要更改命令。

  1. 创建资源组以包含新的存储帐户。

    New-AzResourceGroup `
      -Name storageRG `
      -Location chinanorth2
    
  2. 获取模板规格的资源 ID。

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
    
  3. 部署模板规格。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. 提供的参数应与用于 Bicep 文件部署的参数完全相同。 使用存储帐户类型的参数重新部署模板规格。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageAccountType Standard_GRS
    

授予访问权限

如果要让组织中的其他用户部署模板规格,你需要向他们授予读取权限。 对于包含要共享的模板规格的资源组,你可以将读取者角色分配给 Microsoft Entra 组。 有关详细信息,请参阅教程:使用 Azure PowerShell 授予组对 Azure 资源的访问权限

更新 Bicep 文件

创建模板规范后,你决定更新 Bicep 文件。 若要继续使用“PowerShell”或“CLI”选项卡中的示例,请复制示例并替换 main.bicep 文件。

参数 storageNamePrefix 指定存储帐户名称的前缀值。 storageAccountName 变量将前缀与唯一字符串连接起来。

@allowed([
  'Premium_LRS'
  'Standard_GRS'
  'Standard_LRS'
  'Standard_RAGRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

@maxLength(11)
@description('The storage account name prefix.')
param storageNamePrefix string = 'storage'

var storageAccountName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountNameOutput string = storageAccount.name

更新模板规格版本

在现有模板规范中添加名为 2.0 的新版本,而不是为修改后的模板创建新的模板规范。用户可以选择部署任一版本。

  1. 创建模板规范的新版本。

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "2.0" `
      -ResourceGroupName templateSpecRG `
      -Location chinanorth2 `
      -TemplateFile "C:\templates\main.bicep"
    
  2. 若要部署新版本,请获取 2.0 版本的资源 ID。

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. 部署新版本并使用 storageNamePrefix 指定存储帐户名称的前缀。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageNamePrefix "demo"
    

清理资源

若要清理本快速入门中部署的资源,请删除创建的两个资源组。 将删除资源组、模板规范和存储帐户。

使用 Azure PowerShell 或 Azure CLI 删除资源组。

Remove-AzResourceGroup -Name "templateSpecRG"

Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG

az group delete --name storageRG

后续步骤