Variabelen in ARM-sjablonen

In dit artikel wordt beschreven hoe u variabelen in uw Azure Resource Manager (ARM-sjabloon) definieert en gebruikt. U gebruikt variabelen om uw sjabloon te vereenvoudigen. In plaats van complexe expressies in uw sjabloon te herhalen, definieert u een variabele die de gecompliceerde expressie bevat. Vervolgens gebruikt u die variabele naar behoefte in de sjabloon.

Resource Manager worden variabelen opgelost voordat de implementatiebewerkingen worden uitgevoerd. Wanneer de variabele wordt gebruikt in de sjabloon, wordt deze door de Resource Manager vervangen door de omgezette waarde.

Variabele definiëren

Wanneer u een variabele definieert, geeft u geen gegevenstype op voor de variabele. Geef in plaats daarvan een waarde of sjabloonexpressie op. Het variabeletype wordt afgeleid van de om opgeloste waarde. In het volgende voorbeeld wordt een variabele op een tekenreeks zet.

"variables": {
  "stringVar": "example value"
},

Als u de variabele wilt maken, kunt u de waarde van een parameter of een andere variabele gebruiken.

"parameters": {
  "inputValue": {
    "defaultValue": "deployment parameter",
    "type": "string"
  }
},
"variables": {
  "stringVar": "myVariable",
  "concatToVar": "[concat(variables('stringVar'), '-addtovar') ]",
  "concatToParam": "[concat(parameters('inputValue'), '-addtoparam')]"
}

U kunt sjabloonfuncties gebruiken om de variabele waarde te maken.

In het volgende voorbeeld wordt een tekenreekswaarde gemaakt voor de naam van een opslagaccount. Er worden verschillende sjabloonfuncties gebruikt om een parameterwaarde op te halen en deze samen tevoegen tot een unieke tekenreeks.

"variables": {
  "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},

U kunt de referentiefunctie of een van de lijstfuncties in de variabeledeclaratie niet gebruiken. Deze functies krijgen de runtime-status van een resource en kunnen niet worden uitgevoerd vóór de implementatie wanneer variabelen worden opgelost.

Variabele gebruiken

In het volgende voorbeeld ziet u hoe u de variabele gebruikt voor een resource-eigenschap.

Als u wilt verwijzen naar de waarde voor de variabele, gebruikt u de functie variables.

"variables": {
  "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[variables('storageName')]",
    ...
  }
]

Voorbeeldsjabloon

Met de volgende sjabloon worden geen resources geïmplementeerd. Het toont enkele manieren om variabelen van verschillende typen te declareren.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "inputValue": {
      "defaultValue": "deployment parameter",
      "type": "string"
    }
  },
  "variables": {
    "stringVar": "myVariable",
    "concatToVar": "[concat(variables('stringVar'), '-addtovar') ]",
    "concatToParam": "[concat(parameters('inputValue'), '-addtoparam')]",
    "arrayVar": [
      1,
      2,
      3,
      4
    ],
    "objectVar": {
      "property1": "value1",
      "property2": "value2"
    },
    "copyWithinVar": {
      "copy": [
        {
          "name": "disks",
          "count": 5,
          "input": {
            "name": "[concat('myDataDisk', copyIndex('disks', 1))]",
            "diskSizeGB": "1",
            "diskIndex": "[copyIndex('disks')]"
          }
        },
        {
          "name": "diskNames",
          "count": 5,
          "input": "[concat('myDataDisk', copyIndex('diskNames', 1))]"
        }
      ]
    },
    "copy": [
      {
        "name": "topLevelCopy1",
        "count": 5,
        "input": {
          "name": "[concat('oneDataDisk', copyIndex('topLevelCopy1', 1))]",
          "diskSizeGB": "1",
          "diskIndex": "[copyIndex('topLevelCopy1')]"
        }
      },
      {
        "name": "topLevelCopy2",
        "count": 3,
        "input": {
          "name": "[concat('twoDataDisk', copyIndex('topLevelCopy2', 1))]",
          "diskSizeGB": "1",
          "diskIndex": "[copyIndex('topLevelCopy2')]"
        }
      },
      {
        "name": "topLevelCopy3",
        "count": 4,
        "input": "[concat('stringValue', copyIndex('topLevelCopy3'))]"
      },
      {
        "name": "topLevelCopy4",
        "count": 4,
        "input": "[copyIndex('topLevelCopy4')]"
      }
    ]
  },
  "resources": [],
  "outputs": {
    "stringOutput": {
      "type": "string",
      "value": "[variables('stringVar')]"
    },
    "concatToVariableOutput": {
      "type": "string",
      "value": "[variables('concatToVar')]"
    },
    "concatToParameterOutput": {
      "type": "string",
      "value": "[variables('concatToParam')]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[variables('arrayVar')]"
    },
    "arrayElementOutput": {
      "type": "int",
      "value": "[variables('arrayVar')[0]]"
    },
    "objectOutput": {
      "type": "object",
      "value": "[variables('objectVar')]"
    },
    "copyWithinVariableOutput": {
      "type": "object",
      "value": "[variables('copyWithinVar')]"
    },
    "topLevelCopyOutput1": {
      "type": "array",
      "value": "[variables('topLevelCopy1')]"
    },
    "topLevelCopyOutput2": {
      "type": "array",
      "value": "[variables('topLevelCopy2')]"
    },
    "topLevelCopyOutput3": {
      "type": "array",
      "value": "[variables('topLevelCopy3')]"
    },
    "topLevelCopyOutput4": {
      "type": "array",
      "value": "[variables('topLevelCopy4')]"
    }
  }
}

Configuratievariabelen

U kunt variabelen definiëren die gerelateerde waarden bevatten voor het configureren van een omgeving. U definieert de variabele als een object met de waarden. In het volgende voorbeeld ziet u een -object dat waarden bevat voor twee omgevingen: test en prod. Geef een van deze waarden door tijdens de implementatie.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environmentName": {
      "type": "string",
      "allowedValues": [
        "test",
        "prod"
      ],
      "metadata": {
        "description": "Specify either test or prod for configuration values."
      }
    }
  },
  "variables": {
    "environmentSettings": {
      "test": {
        "instanceSize": "Small",
        "instanceCount": 1
      },
      "prod": {
        "instanceSize": "Large",
        "instanceCount": 4
      }
    }
  },
  "resources": [],
  "outputs": {
    "instanceSize": {
      "value": "[variables('environmentSettings')[parameters('environmentName')].instanceSize]",
      "type": "string"
    },
    "instanceCount": {
      "value": "[variables('environmentSettings')[parameters('environmentName')].instanceCount]",
      "type": "int"
    }
  }
}

Volgende stappen

  • Zie Inzicht in de structuur en syntaxis van ARM-sjablonen voor meer informatie over de beschikbare eigenschappen voor variabelen.
  • Zie Aanbevolen procedures - variabelen voor aanbevelingen voor het maken van variabelen.
  • Zie Netwerkbeveiligingsregels en parameterbestand voor een voorbeeldsjabloon die beveiligingsregels toewijst aan een netwerkbeveiligingsgroep.