Aracılığıyla paylaş


ARM şablonlarında söz dizimi ve ifadeler

Azure Resource Manager şablonunun (ARM şablonu) temel söz dizimi JavaScript Nesne Gösterimi 'dir (JSON). Ancak, ifadeleri kullanarak şablonda kullanılabilen JSON değerlerini genişletebilirsiniz. İfadeler köşeli ayraçla başlayıp biter: [ ve ]. İfadenin değeri, şablon dağıtıldığında değerlendirilir. İfade dize, tamsayı, boole, dizi veya nesne döndürebilir.

Şablon ifadesi 24.576 karakteri aşamaz.

İşlev kullanma

Azure Resource Manager, şablonda kullanabileceğiniz işlevler sağlar. Aşağıdaki örnekte, bir parametrenin varsayılan değerinde işlev kullanan bir ifade gösterilmektedir:

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

İfadenin içinde söz dizimiresourceGroup(), Resource Manager bir şablon içinde kullanım için sağladığı işlevlerden birini çağırır. Bu durumda resourceGroup işlevidir. JavaScript'te olduğu gibi işlev çağrıları olarak functionName(arg1,arg2,arg3)biçimlendirilir. Söz dizimi .location , bu işlev tarafından döndürülen nesneden bir özellik alır.

Şablon işlevleri ve parametreleri büyük/küçük harfe duyarlı değildir. Örneğin, Resource Manager ve aynı şekilde çözümler variables('var1')VARIABLES('VAR1'). İşlev büyük/küçük harf (veya gibi toUppertoLower) durumunu açıkça değiştirmediği sürece değerlendirildiğinde, işlev büyük/küçük harf durumunu korur. Bazı kaynak türlerinin, işlevlerin değerlendirilme yönteminden ayrı büyük/küçük harf gereksinimleri olabilir.

Bir dize değerini bir işleve parametre olarak geçirmek için tek tırnak işareti kullanın.

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

İşlevlerin çoğu bir kaynak grubuna, aboneliğe, yönetim grubuna veya kiracıya dağıtılsa da aynı şekilde çalışır. Aşağıdaki işlevlerin kapsamına göre kısıtlamaları vardır:

  • resourceGroup - yalnızca bir kaynak grubuna yapılan dağıtımlarda kullanılabilir.
  • resourceId - herhangi bir kapsamda kullanılabilir, ancak geçerli parametreler kapsama bağlı olarak değişir.
  • subscription - yalnızca bir kaynak grubuna veya aboneliğe yapılan dağıtımlarda kullanılabilir.

Kaçış karakterleri

Sabit dizenin sol köşeli ayraçla başlaması ve sağ köşeli ayraçla []bitmesi, ancak ifade olarak yorumlanmaması için dizeyi ile [[başlatmak için bir ek köşeli ayraç ekleyin. Örneğin, değişkeni:

"demoVar1": "[[test value]"

olarak çözümler [test value].

Ancak, değişmez dize köşeli ayraçla bitmezse ilk köşeli ayraçtan kaçış yapmayın. Örneğin, değişkeni:

"demoVar2": "[test] value"

olarak çözümler [test] value.

Şablona JSON nesnesi ekleme gibi bir ifadedeki çift tırnak işaretinden kurtulmak için ters eğik çizgi kullanın.

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

ARM ifade çıkışındaki tek tırnaklardan kurtulmak için tek tırnakları iki katına çıkarın. Aşağıdaki şablonun çıkışı JSON değeriyle {"abc":"'quoted'"}sonuç verir.

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

Kaynak tanımında, ifade içindeki değerleri iki kez kaçış olarak kullanın. scriptOutput Aşağıdaki şablondan şu şekildedirde'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]"
    }
  }
}

languageVersion 2.0 ile çift kaçış daha uzun süre gereklidir. Yukarıdaki örnek, aynı sonucu de'felde etmek için aşağıdaki JSON olarak yazılabilir.

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

Parametre değerlerini geçirirken, kaçış karakterlerinin kullanımı parametre değerinin belirtildiği yere bağlıdır. Şablonda varsayılan bir değer ayarlarsanız, fazladan sol köşeli ayraç gerekir.

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

Varsayılan değeri kullanırsanız, şablon döndürür [test value].

Ancak, komut satırı aracılığıyla bir parametre değeri geçirirseniz, karakterler kelimenin tam anlamıyla yorumlanır. Önceki şablonu şu şekilde dağıtma:

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

[[test value] döndürür. Bunun yerine aşağıdakini kullanın:

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

Bir parametre dosyasından değerleri geçirirken aynı biçimlendirme uygulanır. Karakterler kelimenin tam anlamıyla yorumlanır. Önceki şablonla kullanıldığında, aşağıdaki parametre dosyası döndürür [test value]:

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

Null değerler

Bir özelliği null olarak ayarlamak için null veya [json('null')] kullanabilirsiniz. Json işlevi, parametre olarak sağladığınızda null boş bir nesne döndürür. Her iki durumda da, Resource Manager şablonları özelliği yok gibi davranır.

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

Bir öğeyi tamamen kaldırmak için filter() işlevini kullanabilirsiniz. Örnek:

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

Sonraki adımlar