探索範本元件
Azure Resource Manager 範本以 JSON 撰寫,可讓您以文字表示儲存為物件 (例如虛擬機器) 的資料。
「JSON 文件」基本上是索引鍵/值組的集合。 每個索引鍵都是字串,值可為下列類型:
- 字串。
- 數字。
- Boolean 運算式。
- 值的清單。
- 物件 (也就是其他索引鍵/值組的集合)。
Resource Manager 範本可包含使用 JSON 標記法表示,但與 JSON 語言本身無關的區段:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
讓我們更仔細地看一下這些區段。
參數
您要在此區段指定範本執行時可設定哪些值。
例如,您可能會允許範本使用者設定使用者名稱、密碼或網域名稱。
以下是說明兩個參數的範例:一個用於虛擬機器 (VM) 的使用者名稱,另一個用於其密碼:
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
}
}
變數
您要在此區段定義整個範本中使用的值。
變數有助於讓您的範本更容易維護。
例如,您可以先將儲存體帳戶名稱定義為變數,就可在整個範本中使用該變數。
如果儲存體帳戶名稱變更,您只需要更新變數一次。
以下範例說明描述 VM 網路功能的幾個變數:
"variables": {
"nicName": "myVMNic",
"addressPrefix": "10.0.0.0/16",
"subnetName": "Subnet",
"subnetPrefix": "10.0.0.0/24",
"publicIPAddressName": "myPublicIP",
"virtualNetworkName": "MyVNET"
}
函式
您要在此區段定義您不想要在整個範本重複的程序。
函式和變數一樣,有助於讓您的範本更容易維護。
以下範例會建立一個函式,以建立唯一名稱,在建立具有全域唯一命名需求的資源時使用:
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
資源
您要在此區段定義組成您部署的 Azure 資源。
以下是建立公用 IP 位址資源的範例:
{
"type": "Microsoft.Network/publicIPAddresses",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"apiVersion": "2018-08-01",
"properties": {
"publicIPAllocationMethod": "Dynamic",
"dnsSettings": {
"domainNameLabel": "[parameters('dnsLabelPrefix')]"
}
}
}
這裡的資源類型為 Microsoft.Network/publicIPAddresses
。
其名稱是從變數區段讀取,而其位置或 Azure 區域,則是從參數區段讀取。
資源類型可以隨著時間變更,因此 apiVersion
指的是您想要使用之資源類型的版本。
您可以隨著資源類型的演化,修改您的範本,以便使用最新的功能。
輸出
您要在此區段定義您希望在範本執行時收到的任何資訊。
例如,您可能想要收到您在部署之前不知道的資訊,如 VM IP 位址或完整網域名稱 (FQDN)。
以下是說明名為 hostname 的輸出的範例。
FQDN 值是從 VM 的公用 IP 位址設定讀取:
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
}
}