次の方法で共有


ARM テンプレートのユーザー定義関数

ユーザー定義関数は、ARM テンプレート内の複雑な式を簡略化して再利用するのに役立ちます。 カスタム関数にロジックをカプセル化することで、特に同じロジックが複数の場所に出現する場合に、テンプレートの読みやすさ、保守容易性、スケーラビリティを向上させることができます。 これらの関数は、常に使用可能な 組み込みのテンプレート関数 とは異なります。 Bicep でユーザー定義関数を定義するには、 Bicep のユーザー定義関数を参照してください。

関数を定義する

関数には、テンプレート関数との名前の競合を避けるために名前空間の値が必要です。 次の例は、一意の名前を返す関数を示しています。

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

関数を使用する

次の例は、ストレージ アカウントの一意の名前を取得するためのユーザー定義関数を含むテンプレートを示しています。 テンプレートには、 storageNamePrefix という名前のパラメーターがあり、これは関数にパラメーターとして渡されます。

{
 "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
 "contentVersion": "1.0.0.0",
 "parameters": {
   "storageNamePrefix": {
     "type": "string",
     "maxLength": 11
   }
 },
 "functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[format('{0}{1}', toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],
 "resources": [
   {
     "type": "Microsoft.Storage/storageAccounts",
     "apiVersion": "2025-01-01",
     "name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
     "___location": "South Central US",
     "sku": {
       "name": "Standard_LRS"
     },
     "kind": "StorageV2",
     "properties": {
       "supportsHttpsTrafficOnly": true
     }
   }
 ]
}

デプロイ中に、 storageNamePrefix パラメーターが関数に渡されます。

  • このテンプレートは、 storageNamePrefix という名前のパラメーターを定義します。
  • この関数では、関数で定義されたパラメータしか使用できないため、 namePrefix が使用されます。 詳細については、制限に関するページを参照してください。
  • テンプレートの resources セクションでは、 name 要素が関数を使用し、 storageNamePrefix 値を関数の namePrefixに渡します。

制限事項

ユーザー関数を定義するときに、適用される制限がいくつかあります。

  • 関数は変数にアクセスできません。
  • 関数は、関数内で定義されているパラメーターのみを使用できます。 ユーザー定義関数内で parameters 関数を使用すると、その関数のパラメーターに制限されます。
  • 関数は、その他のユーザー定義関数を呼び出すことはできません。
  • 関数では、reference 関数、またはいずれの list 関数も使用できません。
  • 関数のパラメーターでは既定値を指定できません。

次のステップ