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 kibővítheti 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 olyan függvényeket biztosít, amelyeket sablonban használhat. Az alábbi példa egy olyan kifejezést mutat be, amely függvényt használ egy paraméter alapértelmezett értékében:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
A kifejezésen belül a szintaxis resourceGroup()
meghívja a Resource Manager által a sablonban használható függvények egyikét. Ebben az esetben ez a resourceGroup függvény. A JavaScripthez hasonlóan a függvényhívások is functionName(arg1,arg2,arg3)
a következőképpen 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 érzékenyek a kis- és nagybetűkre. A Resource Manager például feloldja variables('var1')
a problémát, és VARIABLES('VAR1')
ugyanúgy. 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 paraméterként szeretne sztringértéket átadni egy függvénynek, használjon egyetlen idézőjelet.
"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. A hatókör alapján az alábbi függvények 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 zárójeltel kezdődik, és jobb oldali szögletes [
zárójeltel ]
végződik, de nem értelmezi kifejezésként, adjon hozzá egy további zárójelet a sztring [[
elindításához. Például a változó:
"demoVar1": "[[test value]"
A feloldás a lesz [test value]
.
Ha azonban a literális sztring nem szögletes zárójeltel végződik, ne meneküljön ki az első zárójelből. Például a változó:
"demoVar2": "[test] value"
A feloldás a lesz [test] value
.
Ha meg szeretne szabadulni egy kifejezés dupla idézőjelei elől, például JSON-objektumot ad hozzá a sablonhoz, használja a fordított perjelet.
"tags": {
"CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
},
Ha egy ARM-kifejezés kimenetében szeretne feloldani egy idézőjelet, duplázza fel az egyes 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ásdefinícióban a kifejezésen belüli dupla feloldási értékek. A scriptOutput
következő sablonból származik.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-val a dupla feloldás hosszabb ideig szükséges. Az előző példa a következő JSON-ké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 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 ad vissza [test value]
.
Ha azonban paraméterértéket ad át a parancssoron keresztül, a karaktereket a rendszer szó szerint értelmezi. Az előző sablon üzembe helyezése a következőkkel:
New-AzResourceGroupDeployment -ResourceGroupName demoGroup -TemplateFile azuredeploy.json -demoParam1 "[[test value]"
A visszaadott érték.[[test value]
Ehelyett alkalmazza a következő módszert:
New-AzResourceGroupDeployment -ResourceGroupName demoGroup -TemplateFile azuredeploy.json -demoParam1 "[test value]"
Ugyanez a formázás érvényes, ha egy paraméterfájlból ad át értékeket. A karaktereket a rendszer szó szerint értelmezi. Az előző sablon használatakor 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 egy üres objektumot ad null
vissza, amikor megadja a paramétert. A Resource Manager-sablonok mindkét esetben ú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élda:
{
"$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 az ARM-sablonfüggvények között találja.
- A sablonfájlokról további információt az ARM-sablonok szerkezetének és szintaxisának ismertetése című témakörben talál.