Składnia i wyrażenia w szablonach arm

Podstawowa składnia szablonu Azure Resource Manager (arm) to JavaScript Object Notation (JSON). Można jednak używać wyrażeń do rozszerzania wartości JSON dostępnych w szablonie. Wyrażenia zaczynają się i kończą nawiasami kwadratowymi: odpowiednio [ i ]. Wartość wyrażenia jest obliczana podczas wdrażania szablonu. Wyrażenie może zwrócić ciąg, liczbę całkowitą, wartość logiczną, tablicę lub obiekt.

Wyrażenie szablonu nie może przekraczać 24 576 znaków.

Korzystanie z funkcji

Azure Resource Manager udostępnia funkcje, których można używać w szablonie. W poniższym przykładzie pokazano wyrażenie, które używa funkcji w wartości domyślnej parametru:

"parameters": {
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},

W wyrażeniu składnia wywołuje jedną z funkcji, które resourceGroup() Resource Manager do użycia w szablonie. W tym przypadku jest to funkcja resourceGroup. Podobnie jak w języku JavaScript wywołania funkcji są formatowane jako functionName(arg1,arg2,arg3) . Składnia .location pobiera jedną właściwość z obiektu zwróconego przez tę funkcję.

W funkcjach szablonu i ich parametrach nie jest uwzględniania litera. Na przykład Resource Manager i variables('var1')VARIABLES('VAR1') takie same. Podczas oceny, chyba że funkcja wyraźnie modyfikuje literę (taką jak lub ), funkcja toUpper toLower zachowuje przypadek. Niektóre typy zasobów mogą mieć wymagania dotyczące przypadków, które są niezależne od sposobu oceniania funkcji.

Aby przekazać wartość ciągu jako parametr do funkcji, użyj cudzysłowów pojedynczych.

"name": "[concat('storage', uniqueString(resourceGroup().id))]"

Większość funkcji działa tak samo niezależnie od tego, czy są wdrażane w grupie zasobów, subskrypcji, grupie zarządzania lub dzierżawie. Następujące funkcje mają ograniczenia oparte na zakresie:

  • resourceGroup — może być używana tylko we wdrożeniach do grupy zasobów.
  • resourceId — może być używany w dowolnym zakresie, ale prawidłowe parametry zmieniają się w zależności od zakresu.
  • subskrypcja — może być używana tylko we wdrożeniach do grupy zasobów lub subskrypcji.

Znaki ucieczki

Aby ciąg literału zaczynał się od lewego nawiasu i kończył się prawym nawiasem kwadratowym, ale nie został zinterpretowany jako wyrażenie, dodaj dodatkowy nawias, aby rozpocząć [ ] ciąg od [[ . Na przykład zmienna:

"demoVar1": "[[test value]"

Jest rozpoznawczy jako [test value] .

Jeśli jednak ciąg literału nie kończy się nawiasem kwadratowym, nie należy zmieniać znaczenia pierwszego nawiasu. Na przykład zmienna:

"demoVar2": "[test] value"

Jest rozpoznawczy jako [test] value .

Aby uniknąć podwójnego cudzysłowu w wyrażeniu, takim jak dodanie obiektu JSON w szablonie, użyj ukośnika odwrotnego.

"tags": {
    "CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
},

Podczas przekazywania wartości parametrów użycie znaków ucieczki zależy od tego, gdzie określono wartość parametru. Jeśli ustawisz wartość domyślną w szablonie, potrzebujesz dodatkowego lewego nawiasu.

{
    "$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')]"
        }
    }
}

Jeśli używasz wartości domyślnej, szablon zwraca wartość [test value] .

Jeśli jednak przekażemy wartość parametru za pośrednictwem wiersza polecenia, znaki zostaną zinterpretowane dosłownie. Wdrażanie poprzedniego szablonu za pomocą:

New-AzResourceGroupDeployment -ResourceGroupName demoGroup -TemplateFile azuredeploy.json -demoParam1 "[[test value]"

Zwraca wartość [[test value]. Zamiast tego użyj:

New-AzResourceGroupDeployment -ResourceGroupName demoGroup -TemplateFile azuredeploy.json -demoParam1 "[test value]"

To samo formatowanie ma zastosowanie w przypadku przekazywania wartości z pliku parametrów. Znaki są interpretowane dosłownie. W przypadku korzystania z poprzedniego szablonu następujący plik parametrów zwraca wartość [test value] :

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "demoParam1": {
            "value": "[test value]"
        }
   }
}

Wartości null

Aby ustawić dla właściwości wartość null, można wpisać null lub [json('null')]. Funkcja JSON zwraca pusty obiekt po udostępnioną null wartość parametru . W obu przypadkach Resource Manager traktują ją tak, jakby właściwość nie była obecna.

"stringValue": null,
"objectValue": "[json('null')]"

Następne kroki