快速入門:使用 Bicep 建立及部署範本規格
本快速入門會說明如何使用 Bicep 檔案建立及部署範本規格。 範本規格會部署到資源群組,讓組織中的人員可在 Microsoft Azure 中部署資源。 範本規格可讓您共用部署範本,卻不必為使用者提供變更 Bicep 檔案的存取權。 此範本規格範例會使用 Bicep 檔案來部署儲存體帳戶。
當您建立範本規格時,Bicep 檔案會轉譯成 JavaScript 物件標記法 (JSON)。 範本規格會使用 JSON 部署 Azure 資源。 目前尚無法使用 Microsoft Azure 入口網站匯入 Bicep 檔案並建立範本規格資源。
必要條件
建立 Bicep 檔案
您可以從本機 Bicep 檔案建立範本規格。 複製下列範例,並在您的電腦儲存為 main.bicep。 這些範例使用 C:\templates\main.bicep 路徑。 您可以使用不同的路徑,但如此即必須變更命令。
下列 Bicep 檔案用於 [PowerShell] 和 [CLI] 索引標籤中。 [Bicep 檔案] 索引標籤使用不同的範本,其可結合 Bicep 和 JSON 以建立與部署範本規格。
@allowed([
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
])
@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
。 您可以使用不同的名稱,但如此即必須變更命令。
建立包含範本規格的新資源群組。
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
在該資源群組中建立範本規格。 為新的範本規格指定 storageSpec 的名稱。
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
建立包含範本規格的新資源群組。
az group create \
--name templateSpecRG \
--location westus2
在該資源群組中建立範本規格。 為新的範本規格指定 storageSpec 的名稱。
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
您可以使用 Bicep 檔案建立範本規格,但 mainTemplate
必須使用 JSON 格式。 JSON 範本不使用標準 JSON 語法。 例如,沒有行尾逗號、雙引號會換成單引號,反斜線 (\
) 則用來逸出運算式中的單引號。
複製下列範本,並在您的電腦儲存為 main.bicep。
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '1.0'
@description('Location for all resources.')
param location string = resourceGroup().location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
location: location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
location: location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'location': {
'type': 'string'
'defaultValue': '[resourceGroup().location]'
'metadata': {
'description': 'Location for all resources.'
}
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', \'storage\', uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2023-04-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
使用 Azure PowerShell 或 Azure CLI 建立新的資源群組。
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
在該資源群組中建立範本規格。 範本規格名稱 storageSpec 和版本號碼 1.0
是 Bicep 檔案中的參數。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
部署範本規格
使用範本規格來部署儲存體帳戶。 本範例使用資源群組名稱 storageRG
。 您可以使用不同的名稱,但如此即必須變更命令。
建立資源群組以包含新的儲存體帳戶。
New-AzResourceGroup `
-Name storageRG `
-Location westus2
取得範本規格的資源識別碼。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
部署範本規格。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
您提供的參數和在 Bicep 檔案部署中提供的參數完全相同。 使用儲存體帳戶類型的參數重新部署範本規格。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
建立資源群組以包含新的儲存體帳戶。
az group create \
--name storageRG \
--location westus2
取得範本規格的資源識別碼。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
注意
取得範本規格識別碼,並將其指派給 Windows PowerShell 中的變數時,發生已知的問題。
部署範本規格。
az deployment group create \
--resource-group storageRG \
--template-spec $id
您提供的參數和在 Bicep 檔案部署中提供的參數完全相同。 使用儲存體帳戶類型的參數重新部署範本規格。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType="Standard_GRS"
若要使用 Bicep 檔案部署範本規格,請使用模組。 此模組會連結至現有範本規格。如需詳細資訊,請參閱範本規格中的檔案 (機器翻譯)。
複製下列 Bicep 模組,並在您的電腦儲存為 storage.bicep。
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
取代模組中的 <subscriptionId>
。 使用 Azure PowerShell 或 Azure CLI 取得您的訂閱識別碼。
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
使用 Azure PowerShell 或 Azure CLI 為儲存體帳戶建立新的資源群組。
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
使用 Azure PowerShell 或 Azure CLI 部署範本規格。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
您可以新增參數,並使用不同的儲存體帳戶類型重新部署範本規格。 複製範例並用以取代您的 storage.bicep 檔案。 然後,重新部署範本規格部署。
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
storageAccountType: 'Standard_GRS'
}
}
授予存取權
如果您想要讓貴組織中的其他使用者部署您的範本規格,您必須授與他們讀取權限。 您可以將「讀者」角色指派給資源群組的 Microsoft Entra 群組,其中包含您想要共用的範本規格。 如需詳細資訊,請參閱教學課程:使用 Azure PowerShell 將 Azure 資源的存取權授與群組 (機器翻譯)。
更新 Bicep 檔案
建立範本規格之後,您決定要更新 Bicep 檔案。 若要繼續使用 [PowerShell] 或 [CLI] 索引標籤中的範例,請複製範例並用以取代您的 main.bicep 檔案。
參數 storageNamePrefix
會指定儲存體帳戶名稱的前置詞值。 storageAccountName
變數會串連前置詞與唯一字串。
@allowed([
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
])
@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
的新版本新增至現有範本規格,而不是針對修改過的範本建立新範本規格。使用者可以選擇部署任一版本。
建立新版本的範本規格。
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
若要部署新版本,請取得 2.0
版本的資源識別碼。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
部署新版本,並使用 storageNamePrefix
指定儲存體帳戶名稱的前置詞。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
建立新版本的範本規格。
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
若要部署新版本,請取得 2.0
版本的資源識別碼。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
部署新版本,並使用 storageNamePrefix
指定儲存體帳戶名稱的前置詞。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
建立新版本的範本規格。複製範例並用以取代您的「main.bicep」檔案。
參數 storageNamePrefix
會指定儲存體帳戶名稱的前置詞值。 storageAccountName
變數會串連前置詞與唯一字串。
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '2.0'
@description('Location for all resources.')
param location string = resourceGroup().location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
location: location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
location: location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'location': {
'type': 'string'
'defaultValue': '[resourceGroup().location]'
'metadata': {
'description': 'Location for all resources.'
}
}
'storageNamePrefix': {
'type': 'string'
'defaultValue': 'storage'
'metadata': {
'description': 'The storage account name prefix.'
}
'maxLength': 11
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', toLower(parameters(\'storageNamePrefix\')), uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2023-04-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
若要將新版本新增至範本規格,請使用 Azure PowerShell 或 Azure CLI 來部署您的範本。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
複製下列 Bicep 模組,並在您的電腦儲存為 storage.bicep。
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
取代模組中的 <subscriptionId>
。 使用 Azure PowerShell 或 Azure CLI 取得您的訂閱識別碼。
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
使用 Azure PowerShell 或 Azure CLI 部署範本規格。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
清除資源
若要清除您在本快速入門中部署的資源,兩個資源群組都請刪除。 將會刪除資源群組、範本規格和儲存體帳戶。
使用 Azure PowerShell 或 Azure CLI 刪除資源群組。
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
下一步