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 dizimi resourceGroup() , Resource Manager'ın şablon içinde kullanmak üzere 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 aynı şekilde ve variables('var1') çözümlemektedirVARIABLES('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ğerlendirilmesinden 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ılırken 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 bir 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 ek bir köşeli ayraç ekleyin. Örneğin, değişkeni:

"demoVar1": "[[test value]"

olarak [test value]çözümler.

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

"demoVar2": "[test] value"

olarak [test] valueçözümler.

Ş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ışında tek tırnak işaretinden kurtulmak için tek tırnakları ikiye katlar. 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: 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]"
    }
  }
}

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 nerede belirtildiğine bağlıdır. Şablonda varsayılan bir değer ayarlarsanız, ek 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. Örneğin:

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