建立並發佈範本規格

已完成

讓我們看看如何建立並發佈範本規格。

建立範本

若要建立用作範本規格的範本,您可以撰寫 Azure Resource Manager 範本 (ARM 範本),就像您平常做的一樣。 您可以包含參數、變數、資源與輸出。

您可以使用「連結的範本」,這可讓您在個別檔案中定義部署的各個部分。 當您使用範本規格時,可將連結的範本內嵌到範本規格中,並從您的主要範本參考。

請務必確認您的範本可讓組織中的任何人員輕易理解並使用,尤其是其參數。 請確定您會使用清楚且可理解的參數名稱。 使用參數屬性與範本中繼資料來提供您預期參數要包含之值的相關資訊,如下列範例所示:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environmentType": {
      "type": "string",
      "allowedValues": [
        "Production",
        "NonProduction"
      ],
      "metadata": {
        "description": "The type of the environment to deploy. This will determine the SKUs and cost of the resources."
      }
    },
    "key": {
      "type": "secureString",
      "metadata": {
        "description": "The secret key to use."
      }
    },
    "location": {
      "type": "string",
      "metadata": {
        "description": "The Azure region into which the resources should be deployed."
      }
    },
    "sqlServerCount": {
      "type": "int",
      "maxValue": 5,
      "metadata": {
        "description": "The number of Azure SQL logical servers to create."
      }
    }
  },
  "resources": []
}

在此範例中,範本參數使用 allowedValuesmaxValuedescription 屬性,清楚指出參數的用途與設定其值的影響。 此範本也包含 secureString 類型,可指出 key 參數包含祕密資料。

請務必確認您的範本可讓組織中的任何人員輕易理解並使用,尤其是參數。 請確定您會使用清楚且可理解的參數名稱。 使用參數裝飾項目來提供您預期參數要包含之值的相關資訊,如下列範例所示:

@description('The type of the environment to deploy. This will determine the SKUs and cost of the resources.')
@allowed([
  'Production'
  'NonProduction'
])
param environmentType string

@secure()
@description('The secret key to use.')
param key string

@description('The Azure region into which the resources should be deployed.')
param location string

@description('The number of Azure SQL logical servers to create.')
@maxValue(5)
param sqlServerCount int

在此範例中,範本參數使用 @allowed@maxValue@description 裝飾項目,清楚指出參數的用途與設定其值的影響。 此範本也包含 secure 裝飾項目,可指出 key 參數包含祕密資料。

當有人使用 Azure 入口網站部署範本規格時,入口網站會:

  • 顯示參數名稱與描述。
  • 隱藏安全參數的文字輸入。
  • 強制執行您定義的允許值、長度限制與值限制。

此螢幕擷取畫面說明參數值的輸入:

Screenshot that shows the Azure portal interface for entering parameter values for a template spec deployment.

請務必考慮您範本規格的使用者將如何使用它,並確保您的參數是清楚且容易理解。

將範本規格發佈至 Azure

撰寫範本之後,您就能發佈範本規格,而不是將範本提交到 Azure 進行部署。

重要

當您以範本規格形式發佈 Bicep 檔案時,您的 Bicep 程式碼就會轉換為 JSON 範本。 將 Bicep 程式碼轉換為 JSON 的流程會移除 Bicep 檔案中的部分資訊。 例如,您的註解、資源的符號名稱與您定義資源的順序可能會在 JSON 中遺漏或不同。 這表示您無法輕鬆地以範本規格形式發佈 Bicep 檔案,然後取回原始的 Bicep 檔案 (亦稱為「往返」)。 建議您在 Git 等程式碼存放庫中保留一份原始的 Bicep 程式碼複本,特別是當您使用範本規格時。

若要建立範本規格,請使用 New-AzTemplateSpec Cmdlet。 下列範例示範如何建立儲存體帳戶範本的範本規格:

New-AzTemplateSpec `
  -Name StorageWithoutSAS `
  -Location westus `
  -DisplayName 'Storage account with SAS disabled' `
  -Description 'This template spec creates a storage account, which is preconfigured to disable SAS authentication.' `
  -Version '1.0' `
  -TemplateFile main.bicep
New-AzTemplateSpec `
  -Name StorageWithoutSAS `
  -Location westus `
  -DisplayName 'Storage account with SAS disabled' `
  -Description 'This template spec creates a storage account, which is preconfigured to disable SAS authentication.' `
  -Version '1.0' `
  -TemplateFile azuredeploy.json

讓我們查看每一個參數:

  • -Name 是範本規格的資源名稱,其中不能包含空格。
  • -Location 是應該建立範本規格中繼資料的位置。 不過,您可以將範本規格部署到任何區域。
  • -DisplayName 是人類看得懂的名稱,其中可以包含空格。
  • -Description 是人類看得懂的描述,您可以加以使用來提供關於範本規格內容,以及何時有人可能加以使用的詳細資料。
  • -Version 是範本規格的版本。您會在此課程模組稍後了解版本。
  • -TemplateFile 是要建立範本規格的 ARM 範本路徑。

若要建立範本規格,請使用 az ts create 命令。 下列範例示範如何建立儲存體帳戶範本的範本規格:

az ts create \
  --name StorageWithoutSAS \
  --location westus \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1.0 \
  --template-file main.bicep
az ts create \
  --name StorageWithoutSAS \
  --location westus \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1.0 \
  --template-file azuredeploy.json

讓我們查看每一個引數:

  • --name 是範本規格的資源名稱,其中不能包含空格。
  • --location 是應該建立範本規格中繼資料的位置。 不過,您可以將範本規格部署到任何區域。
  • --display-name 是人類看得懂的名稱,其中可以包含空格。
  • --description 是人類看得懂的描述,您可以加以使用來提供關於範本規格內容,以及何時有人可能加以使用的詳細資料。
  • --version 是範本規格的版本。您會在此課程模組稍後了解版本。
  • --template-file 是要建立範本規格的 ARM 範本路徑。

提示

您也可以在 ARM 範本內定義範本規格! 由於範本規格本身就是 Azure 資源,因此您可以部署範本來定義 Microsoft.Deployments/templateSpecs 類型的資源。