Parametrar i ARM-mallar
Den här artikeln beskriver hur du definierar och använder parametrar i din Azure Resource Manager-mall (ARM-mall). Genom att ange olika värden för parametrar kan du återanvända en mall för olika miljöer.
Resource Manager löser parametervärden innan distributionsåtgärderna startas. Oavsett var parametern används i mallen ersätter Resource Manager den med det lösta värdet.
Varje parameter måste anges till en av datatyperna.
Förutom minValue, maxValue, minLength, maxLength och allowedValues introducerar languageVersion 2.0 vissa verifieringsbegränsningar av aggregerad typ som ska användas i definitioner, parametrar och utdatadefinitioner . Dessa begränsningar omfattar:
Kommentar
Den aktuella versionen av Azure Resource Manager Tools-tillägget för Visual Studio Code känner inte igen förbättringarna i languageVersion 2.0.
Dricks
Vi rekommenderar Bicep eftersom det erbjuder samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i parametrar.
Du kan ha högst 256 parametrar i en mall. Mer information finns i Mallgränser.
Metodtips för parametrar finns i Parametrar.
Minimal deklaration
Varje parameter behöver minst ett namn och en typ.
När du distribuerar en mall via Azure Portal omvandlas kamelkadlade parameternamn till blankstegsavgränsade namn. DemoString i följande exempel visas till exempel som demosträng. Mer information finns i Använda en distributionsknapp för att distribuera mallar från GitHub-lagringsplatsen och Distribuera resurser med ARM-mallar och Azure Portal.
"parameters": {
"demoString": {
"type": "string"
},
"demoInt": {
"type": "int"
},
"demoBool": {
"type": "bool"
},
"demoObject": {
"type": "object"
},
"demoArray": {
"type": "array"
}
}
Säkra parametrar
Du kan markera sträng- eller objektparametrar som säkra. Värdet för en säker parameter sparas inte i distributionshistoriken och loggas inte.
"parameters": {
"demoPassword": {
"type": "secureString"
},
"demoSecretObject": {
"type": "secureObject"
}
}
Tillåtna värden
Du kan definiera tillåtna värden för en parameter. Du anger de tillåtna värdena i en matris. Distributionen misslyckas under valideringen om ett värde skickas in för parametern som inte är ett av de tillåtna värdena.
"parameters": {
"demoEnum": {
"type": "string",
"allowedValues": [
"one",
"two"
]
}
}
Standardvärde
Du kan ange ett standardvärde för en parameter. Standardvärdet används när ett värde inte anges under distributionen.
"parameters": {
"demoParam": {
"type": "string",
"defaultValue": "Contoso"
}
}
Om du vill ange ett standardvärde tillsammans med andra egenskaper för parametern använder du följande syntax.
"parameters": {
"demoParam": {
"type": "string",
"defaultValue": "Contoso",
"allowedValues": [
"Contoso",
"Fabrikam"
]
}
}
Du kan använda uttryck med standardvärdet. Du kan inte använda referensfunktionen eller någon av listfunktionerna i avsnittet parametrar. Dessa funktioner hämtar körningstillståndet för en resurs och kan inte köras före distributionen när parametrarna har lösts.
Uttryck tillåts inte med andra parameteregenskaper.
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
}
Du kan använda ett annat parametervärde för att skapa ett standardvärde. Följande mall konstruerar ett värdplansnamn från platsnamnet.
"parameters": {
"siteName": {
"type": "string",
"defaultValue": "[concat('site', uniqueString(resourceGroup().id))]"
},
"hostingPlanName": {
"type": "string",
"defaultValue": "[concat(parameters('siteName'),'-plan')]"
}
}
Du kan dock inte referera till en variabel som standardvärde.
Längdbegränsningar
Du kan ange minsta och högsta längd för sträng- och matrisparametrar. Du kan ange en eller båda begränsningarna. För strängar anger längden antalet tecken. För matriser anger längden antalet objekt i matrisen.
I följande exempel deklareras två parametrar. En parameter är för ett lagringskontonamn som måste innehålla 3–24 tecken. Den andra parametern är en matris som måste ha mellan 1 och 5 objekt.
"parameters": {
"storageAccountName": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"appNames": {
"type": "array",
"minLength": 1,
"maxLength": 5
}
}
Heltalsbegränsningar
Du kan ange lägsta och högsta värden för heltalsparametrar. Du kan ange en eller båda begränsningarna.
"parameters": {
"month": {
"type": "int",
"minValue": 1,
"maxValue": 12
}
}
Objektbegränsningar
Objektbegränsningarna tillåts endast för objekt och kan endast användas med languageVersion 2.0.
Egenskaper
Värdet properties
för är en karta över egenskapsnamnet =>typdefinitionen.
Följande exempel skulle acceptera {"foo": "string", "bar": 1}
, men avvisa {"foo": "string", "bar": -1}
, {"foo": "", "bar": 1}
eller något objekt utan en eller bar
-foo
egenskap.
"parameters": {
"objectParameter": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
}
}
}
Alla egenskaper krävs om inte egenskapens typdefinition har villkoret "nullable": true . Om du vill göra båda egenskaperna i föregående exempel valfria skulle det se ut så här:
"parameters": {
"objectParameter": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
}
}
}
additionalProperties
Värdet additionalProperties
för är en typdefinition eller ett booleskt värde. Om ingen additionalProperties
begränsning har definierats är true
standardvärdet .
Om värdet är en typdefinition beskriver värdet schemat som tillämpas på alla egenskaper som inte nämns i villkoret properties
. Följande exempel skulle acceptera {"fizz": "buzz", "foo": "bar"}
men avvisa {"property": 1}
.
"parameters": {
"dictionaryParameter": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
},
"additionalProperties": {
"type": "string"
}
}
}
Om värdet är false
kan inga egenskaper utöver de som definierats i villkoret properties
anges. Följande exempel skulle acceptera {"foo": "string", "bar": 1}
, men avvisa {"foo": "string", "bar": 1, "fizz": "buzz"}
.
"parameters": {
"dictionaryParameter": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": false
}
}
Om värdet är true
accepterar alla egenskaper som inte definierats i villkoret properties
något värde. Följande exempel skulle acceptera {"foo": "string", "bar": 1, "fizz": "buzz"}
.
"parameters": {
"dictionaryParameter": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": true
}
}
diskriminerande
Värdet discriminator
definierar vilket schema som ska tillämpas baserat på en diskriminerande egenskap. Följande exempel skulle acceptera antingen {"type": "ints", "foo": 1, "bar": 2}
eller {"type": "strings", "fizz": "buzz", "pop": "goes", "the": "weasel"}
, men avvisa {"type": "ints", "fizz": "buzz"}
.
"parameters": {
"taggedUnionParameter": {
"type": "object",
"discriminator": {
"propertyName": "type",
"mapping": {
"ints": {
"type": "object",
"additionalProperties": {"type": "int"}
},
"strings": {
"type": "object",
"additionalProperties": {"type": "string"}
}
}
}
}
}
Matrisbegränsningar
Matrisbegränsningarna tillåts endast för matriser och kan endast användas med languageVersion 2.0.
prefixItems
Värdet för prefixItems
är en matris med typdefinitioner. Varje typdefinition i värdet är det schema som ska användas för att verifiera elementet i en matris i samma index. Följande exempel skulle acceptera [1, true]
men avvisa [1, "string"]
eller [1]
:
"parameters": {
"tupleParameter": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
}
}
objekt
Värdet items
för är en typdefinition eller ett booleskt värde. Om ingen items
begränsning har definierats är true
standardvärdet .
Om värdet är en typdefinition beskriver värdet schemat som tillämpas på alla element i matrisen vars index är större än villkorets prefixItems
största index. Följande exempel skulle acceptera [1, true, 1]
eller [1, true, 1, 1]
men avvisa [1, true, "foo"]
:
"parameters": {
"tupleParameter": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
],
"items": { "type": "int" },
"defaultValue": [1, true, "foo"]
}
}
Du kan använda items
utan att använda prefixItems
. Följande exempel skulle acceptera [1, 2]
eller [1]
men avvisa ["foo"]
:
"parameters": {
"intArrayParameter": {
"type": "array",
"items": {"type": "int"}
}
}
Om värdet är false
måste den verifierade matrisen vara exakt lika lång som villkoret prefixItems
. Följande exempel skulle acceptera [1, true]
, men avvisa [1, true, 1]
, och [1, true, false, "foo", "bar"]
.
"parameters": {
"tupleParameter": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
],
"items": false
}
}
Om värdet är sant accepterar element i matrisen vars index är större än det största indexet för villkoret prefixItems
något värde. Följande exempel skulle acceptera [1, true]
, [1, true, 1]
och [1, true, false, "foo", "bar"]
.
"parameters": {
"tupleParameter": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
}
}
"parameters": {
"tupleParameter": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": true
}
nullable-villkor
Den nullbara begränsningen kan endast användas med languageVersion 2.0. Det anger att värdet kan vara null
eller utelämnas. Se Egenskaper för ett exempel.
beskrivning
Du kan lägga till en beskrivning i en parameter som hjälper användare av mallen att förstå värdet som ska anges. När du distribuerar mallen via portalen används den text som du anger i beskrivningen automatiskt som ett tips för den parametern. Lägg bara till en beskrivning när texten innehåller mer information än vad som kan härledas från parameternamnet.
"parameters": {
"virtualMachineSize": {
"type": "string",
"metadata": {
"description": "Must be at least Standard_A3 to support 2 NICs."
},
"defaultValue": "Standard_DS1_v2"
}
}
Använda parameter
Om du vill referera till en parameters värde använder du parameterfunktionen . I följande exempel används ett parametervärde för ett nyckelvalvnamn.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vaultName": {
"type": "string",
"defaultValue": "[format('keyVault{0}', uniqueString(resourceGroup().id))]"
}
},
"resources": [
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2021-06-01-preview",
"name": "[parameters('vaultName')]",
...
}
]
}
Objekt som parametrar
Du kan ordna relaterade värden genom att skicka in dem som ett objekt. Den här metoden minskar också antalet parametrar i mallen.
I följande exempel visas en parameter som är ett objekt. Standardvärdet visar de förväntade egenskaperna för objektet. Dessa egenskaper används när du definierar resursen som ska distribueras.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vNetSettings": {
"type": "object",
"defaultValue": {
"name": "VNet1",
"location": "eastus",
"addressPrefixes": [
{
"name": "firstPrefix",
"addressPrefix": "10.0.0.0/22"
}
],
"subnets": [
{
"name": "firstSubnet",
"addressPrefix": "10.0.0.0/24"
},
{
"name": "secondSubnet",
"addressPrefix": "10.0.1.0/24"
}
]
}
}
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-02-01",
"name": "[parameters('vNetSettings').name]",
"location": "[parameters('vNetSettings').location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vNetSettings').addressPrefixes[0].addressPrefix]"
]
},
"subnets": [
{
"name": "[parameters('vNetSettings').subnets[0].name]",
"properties": {
"addressPrefix": "[parameters('vNetSettings').subnets[0].addressPrefix]"
}
},
{
"name": "[parameters('vNetSettings').subnets[1].name]",
"properties": {
"addressPrefix": "[parameters('vNetSettings').subnets[1].addressPrefix]"
}
}
]
}
}
]
}
Exempelmallar
I följande exempel visas scenarier för att använda parametrar.
Mall | beskrivning |
---|---|
parametrar med funktioner för standardvärden | Visar hur du använder mallfunktioner när du definierar standardvärden för parametrar. Mallen distribuerar inga resurser. Den konstruerar parametervärden och returnerar dessa värden. |
parameterobjekt | Visar hur du använder ett objekt för en parameter. Mallen distribuerar inga resurser. Den konstruerar parametervärden och returnerar dessa värden. |
Nästa steg
- Mer information om tillgängliga egenskaper för parametrar finns i Förstå strukturen och syntaxen för ARM-mallar.
- Mer information om hur du skickar in parametervärden som en fil finns i Skapa Resource Manager-parameterfil.
- Rekommendationer om hur du skapar parametrar finns i Metodtips – parametrar.