Szintaxis és kifejezések ARM-sablonokban
Az Azure Resource Manager sablon (ARM-sablon) alapszintaxisa a JavaScript Object Notation (JSON). Kifejezések használatával azonban kiterjesztheti a sablonban elérhető JSON-értékeket. A kifejezések szögletes zárójellel kezdődnek és végződnek: [
és ]
. A kifejezés értékét a rendszer a sablon üzembe helyezésekor értékeli ki. A kifejezés lehet sztring, egész szám, logikai érték, tömb vagy objektum.
A sablonkifejezések legfeljebb 24 576 karakter hosszúságúak lehetnek.
Függvények használata
Az Azure Resource Manager a sablonban használható függvényeket biztosít. Az alábbi példa egy olyan kifejezést mutat be, amely egy paraméter alapértelmezett értékében egy függvényt használ:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
A kifejezésben a szintaxis resourceGroup()
meghívja az egyik függvényt, amelyet Resource Manager biztosít a sablonban való használatra. Ebben az esetben ez a resourceGroup függvény. A JavaScripthez hasonlóan a függvényhívások is a következő formátumban functionName(arg1,arg2,arg3)
vannak formázva: . A szintaxis .location
egy tulajdonságot kér le a függvény által visszaadott objektumból.
A sablonfüggvények és paramétereik nem különböztetik meg a kis- és nagybetűket. Például a Resource Manager feloldja variables('var1')
VARIABLES('VAR1')
és ugyanúgy. A kiértékeléskor, kivéve, ha a függvény kifejezetten módosítja a kis- és nagybetűket (például toUpper
vagy toLower
), a függvény megőrzi az esetet. Bizonyos erőforrástípusoknak lehetnek olyan esetkövetelményei, amelyek eltérnek a függvények kiértékelésének módjától.
Ha egy sztringértéket paraméterként szeretne átadni egy függvénynek, használjon szimpla idézőjeleket.
"name": "[concat('storage', uniqueString(resourceGroup().id))]"
A legtöbb függvény ugyanúgy működik, függetlenül attól, hogy egy erőforráscsoportban, előfizetésben, felügyeleti csoportban vagy bérlőben vannak üzembe helyezve. Az alábbi függvények hatókörön alapuló korlátozásokkal rendelkeznek:
- resourceGroup – csak erőforráscsoport üzemelő példányaiban használható.
- resourceId – bármely hatókörben használható, de az érvényes paraméterek a hatókörtől függően változnak.
- előfizetés – csak erőforráscsoportban vagy előfizetésben üzemelő példányokban használható.
Escape-karakterek
Ha egy literális sztring bal oldali szögletes zárójelmel kezdődik, és jobb oldali szögletes [
zárójelmel ]
végződik, de nem értelmezi kifejezésként, adjon hozzá egy további szögletes zárójelet a sztring elindításához a következővel [[
: . Például a változó:
"demoVar1": "[[test value]"
A feloldása: [test value]
.
Ha azonban a literális sztring nem szögletes zárójelmel végződik, ne meneküljön ki az első szögletes zárójelből. Például a változó:
"demoVar2": "[test] value"
A feloldása: [test] value
.
Ha meg szeretne szabadulni egy kifejezésben szereplő dupla idézőjelek elől, például JSON-objektumot ad hozzá a sablonhoz, használja a fordított perjelet.
"tags": {
"CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
},
Ha egyetlen idézőjelet szeretne feloldani egy ARM-kifejezés kimenetében, duplázza meg az egyszeres idézőjeleket. A következő sablon kimenete JSON-értéket {"abc":"'quoted'"}
eredményez.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [],
"outputs": {
"foo": {
"type": "object",
"value": "[createObject('abc', '''quoted''')]"
}
}
}
Az erőforrás-definícióban a kifejezésen belüli dupla feloldási értékek. A scriptOutput
következő sablonból a következő: de'f
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"forceUpdateTag": {
"type": "string",
"defaultValue": "[newGuid()]"
}
},
"variables": {
"deploymentScriptSharedProperties": {
"forceUpdateTag": "[parameters('forceUpdateTag')]",
"azPowerShellVersion": "10.1",
"retentionInterval": "P1D"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "escapingTest",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": "[union(variables('deploymentScriptSharedProperties'), createObject('scriptContent', '$DeploymentScriptOutputs = @{}; $DeploymentScriptOutputs.escaped = \"de''''f\";'))]"
}
],
"outputs": {
"scriptOutput": {
"type": "string",
"value": "[reference('escapingTest').outputs.escaped]"
}
}
}
A languageVersion 2.0 esetén a dupla feloldás hosszabb ideig szükséges. Az előző példa a következő JSON-fájlként írható, hogy ugyanazt az eredményt kapja: de'f
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"parameters": {
"forceUpdateTag": {
"type": "string",
"defaultValue": "[newGuid()]"
}
},
"variables": {
"deploymentScriptSharedProperties": {
"forceUpdateTag": "[parameters('forceUpdateTag')]",
"azPowerShellVersion": "10.1",
"retentionInterval": "P1D"
}
},
"resources": {
"escapingTest": {
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "escapingTest",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": "[union(variables('deploymentScriptSharedProperties'), createObject('scriptContent', '$DeploymentScriptOutputs = @{}; $DeploymentScriptOutputs.escaped = \"de''f\";'))]"
}
},
"outputs": {
"scriptOutput": {
"type": "string",
"value": "[reference('escapingTest').outputs.escaped]"
}
}
}
Paraméterértékek megadásakor a feloldókarakterek használata attól függ, hogy hol van megadva a paraméterérték. Ha beállít egy alapértelmezett értéket a sablonban, szüksége lesz a további bal oldali szögletes zárójelre.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"demoParam1": {
"type": "string",
"defaultValue": "[[test value]"
}
},
"resources": [],
"outputs": {
"exampleOutput": {
"type": "string",
"value": "[parameters('demoParam1')]"
}
}
}
Ha az alapértelmezett értéket használja, a sablon a következőt adja [test value]
vissza: .
Ha azonban paraméterértéket ad meg a parancssoron keresztül, a karaktereket szó szerint értelmezi a rendszer. Az előző sablon üzembe helyezése a következőkkel:
New-AzResourceGroupDeployment -ResourceGroupName demoGroup -TemplateFile azuredeploy.json -demoParam1 "[[test value]"
A értéket adja [[test value]
vissza. Ehelyett alkalmazza a következő módszert:
New-AzResourceGroupDeployment -ResourceGroupName demoGroup -TemplateFile azuredeploy.json -demoParam1 "[test value]"
Ugyanez a formázás érvényes, amikor értékeket ad át egy paraméterfájlból. A karaktereket szó szerint értelmezi a rendszer. Az előző sablonnal való használat esetén a következő paraméterfájl ad [test value]
vissza:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"demoParam1": {
"value": "[test value]"
}
}
}
Null-értékek
Ha egy tulajdonságot null értékre szeretne beállítani, használja a következőket: null
vagy [json('null')]
. A json függvény üres objektumot ad vissza, ha paraméterként adja meg null
. Mindkét esetben Resource Manager sablonok úgy kezelik, mintha a tulajdonság nem lenne jelen.
"stringValue": null,
"objectValue": "[json('null')]"
Egy elem teljes eltávolításához használhatja a filter() függvényt. Például:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"deployCaboodle": {
"type": "bool",
"defaultValue": false
}
},
"variables": {
"op": [
{
"name": "ODB"
},
{
"name": "ODBRPT"
},
{
"name": "Caboodle"
}
]
},
"resources": [],
"outputs": {
"backendAddressPools": {
"type": "array",
"value": "[if(parameters('deployCaboodle'), variables('op'), filter(variables('op'), lambda('on', not(equals(lambdaVariables('on').name, 'Caboodle')))))]"
}
}
}
Következő lépések
- A sablonfüggvények teljes listáját lásd: ARM-sablonfüggvények.
- További információ a sablonfájlokról: Az ARM-sablonok szerkezetének és szintaxisának ismertetése.