Azure Resource Manager テンプレートの構造と構文の詳細Understand the structure and syntax of Azure Resource Manager Templates

この記事では、Azure Resource Manager テンプレートの構造について説明します。This article describes the structure of an Azure Resource Manager template. テンプレートの各種セクションとそこで使用できるプロパティを紹介しています。It presents the different sections of a template and the properties that are available in those sections. テンプレートは、JSON、およびデプロイの値を構築するときの式で構成されます。The template consists of JSON and expressions that you can use to construct values for your deployment. テンプレートの作成方法を詳しく解説したチュートリアルについては、「初めての Azure Resource Manager テンプレートを作成する」を参照してください。For a step-by-step tutorial on creating a template, see Create your first Azure Resource Manager template.

テンプレートの形式Template format

最も単純な構造のテンプレートは、次の要素で構成されます。In its simplest structure, a template has the following elements:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}
要素名Element name 必須Required 説明Description
$schema$schema [はい]Yes テンプレート言語のバージョンが記述されている JSON スキーマ ファイルの場所。Location of the JSON schema file that describes the version of the template language. 前の例に示されている URL を使用します。Use the URL shown in the preceding example.
contentVersioncontentVersion [はい]Yes テンプレートのバージョン (1.0.0.0 など)。Version of the template (such as 1.0.0.0). この要素には任意の値を指定できます。You can provide any value for this element. この値を使用し、テンプレートの大きな変更を記述します。Use this value to document significant changes in your template. テンプレートを使用してリソースをデプロイする場合は、この値を使用して、適切なテンプレートが使用されていることを確認できます。When deploying resources using the template, this value can be used to make sure that the right template is being used.
parametersparameters いいえ No リソースのデプロイをカスタマイズするのにはデプロイを実行すると、提供されている値です。Values that are provided when deployment is executed to customize resource deployment.
variablesvariables いいえ No テンプレート言語式を簡略化するためにテンプレート内で JSON フラグメントとして使用される値。Values that are used as JSON fragments in the template to simplify template language expressions.
functionsfunctions いいえ No テンプレート内で使用できるユーザー定義関数。User-defined functions that are available within the template.
resourcesresources [はい]Yes リソース グループ内でデプロイまたは更新されるリソースの種類。Resource types that are deployed or updated in a resource group.
outputsoutputs いいえ No デプロイ後に返される値。Values that are returned after deployment.

各要素には、設定できるプロパティがあります。Each element has properties you can set. 次の例には、テンプレートの完全な構文があります。The following example shows the full syntax for a template:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  
        "<parameter-name>" : {
            "type" : "<type-of-parameter-value>",
            "defaultValue": "<default-value-of-parameter>",
            "allowedValues": [ "<array-of-allowed-values>" ],
            "minValue": <minimum-value-for-int>,
            "maxValue": <maximum-value-for-int>,
            "minLength": <minimum-length-for-string-or-array>,
            "maxLength": <maximum-length-for-string-or-array-parameters>,
            "metadata": {
                "description": "<description-of-the parameter>" 
            }
        }
    },
    "variables": {
        "<variable-name>": "<variable-value>",
        "<variable-object-name>": {
            <variable-complex-type-value>
        },
        "<variable-object-name>": {
            "copy": [
                {
                    "name": "<name-of-array-property>",
                    "count": <number-of-iterations>,
                    "input": {
                        <properties-to-repeat>
                    }
                }
            ]
        },
        "copy": [
            {
                "name": "<variable-array-name>",
                "count": <number-of-iterations>,
                "input": {
                    <properties-to-repeat>
                }
            }
        ]
    },
    "functions": [
      {
        "namespace": "<namespace-for-your-function>",
        "members": {
          "<function-name>": {
            "parameters": [
              {
                "name": "<parameter-name>",
                "type": "<type-of-parameter-value>"
              }
            ],
            "output": {
              "type": "<type-of-output-value>",
              "value": "<function-expression>"
            }
          }
        }
      }
    ],
    "resources": [
      {
          "condition": "<boolean-value-whether-to-deploy>",
          "apiVersion": "<api-version-of-resource>",
          "type": "<resource-provider-namespace/resource-type-name>",
          "name": "<name-of-the-resource>",
          "location": "<location-of-resource>",
          "tags": {
              "<tag-name1>": "<tag-value1>",
              "<tag-name2>": "<tag-value2>"
          },
          "comments": "<your-reference-notes>",
          "copy": {
              "name": "<name-of-copy-loop>",
              "count": "<number-of-iterations>",
              "mode": "<serial-or-parallel>",
              "batchSize": "<number-to-deploy-serially>"
          },
          "dependsOn": [
              "<array-of-related-resource-names>"
          ],
          "properties": {
              "<settings-for-the-resource>",
              "copy": [
                  {
                      "name": ,
                      "count": ,
                      "input": {}
                  }
              ]
          },
          "resources": [
              "<array-of-child-resources>"
          ]
      }
    ],
    "outputs": {
        "<outputName>" : {
            "type" : "<type-of-output-value>",
            "value": "<output-value-expression>"
        }
    }
}

この記事では、テンプレートのセクションについて詳しく説明します。This article describes the sections of the template in greater detail.

構文Syntax

テンプレートの基本的な構文は JSON です。The basic syntax of the template is JSON. ただし、式や関数により、テンプレートで使用できる JSON 値が拡張されます。However, expressions and functions extend the JSON values available within the template. 式は、最初と最後の文字が角かっこ ([ および ]) の JSON 文字列リテラル内に記述されます。Expressions are written within JSON string literals whose first and last characters are the brackets: [ and ], respectively. 式の値は、テンプレートのデプロイ時に評価されます。The value of the expression is evaluated when the template is deployed. 文字列リテラルとして記述される一方で、式の評価の結果は、実際の式に応じて、配列、整数など、さまざまな JSON 型にすることができます。While written as a string literal, the result of evaluating the expression can be of a different JSON type, such as an array or integer, depending on the actual expression. 角かっこ [ で始まるリテラル文字列を使用するが、式として解釈されないようにするには、文字列が [[ で始まるように追加の角かっこを追加します。To have a literal string start with a bracket [, but not have it interpreted as an expression, add an extra bracket to start the string with [[.

通常、関数と式を使用してデプロイを構成する操作を実行します。Typically, you use expressions with functions to perform operations for configuring the deployment. JavaScript の場合と同様に、関数呼び出しは functionName(arg1,arg2,arg3) という形式になります。Just like in JavaScript, function calls are formatted as functionName(arg1,arg2,arg3). プロパティの参照には、ドットと [index] 演算子を使用します。You reference properties by using the dot and [index] operators.

次の例では、値を構築する際にいくつかの関数を使用する方法を示します。The following example shows how to use several functions when constructing a value:

"variables": {
    "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
}

テンプレート関数の完全一覧が必要な場合、「 Azure リソース マネージャーのテンプレートの関数」を参照してください。For the full list of template functions, see Azure Resource Manager template functions.

parametersParameters

テンプレートの parameters セクションでは、リソースをデプロイするときにどのような値を入力できるかを指定します。In the parameters section of the template, you specify which values you can input when deploying the resources. 特定の環境 (開発、テスト、運用など) に合った値をパラメーターに渡すことで、デプロイをカスタマイズすることができます。These parameter values enable you to customize the deployment by providing values that are tailored for a particular environment (such as dev, test, and production). テンプレートでは必ずしもパラメーターを使用する必要はありませんが、パラメーターを使わなかった場合、常に同じリソースが同じ名前、同じ場所、同じプロパティでデプロイされます。You don't have to provide parameters in your template, but without parameters your template would always deploy the same resources with the same names, locations, and properties.

単純なパラメーター定義の例を次に示します。The following example shows a simple parameter definition:

"parameters": {
  "siteNamePrefix": {
    "type": "string",
    "metadata": {
      "description": "The name prefix of the web app that you wish to create."
    }
  },
},

パラメーター定義の詳細については、「Azure Resource Manager テンプレートの parameters セクション」をご覧ください。For information about defining parameters, see Parameters section of Azure Resource Manager templates.

variablesVariables

テンプレート内で使用できる値は、variables セクションで構築します。In the variables section, you construct values that can be used throughout your template. 必ずしも変数を定義する必要はありませんが、変数を定義することによって複雑な式が減り、テンプレートが単純化されることはよくあります。You don't need to define variables, but they often simplify your template by reducing complex expressions.

単純な変数定義の例を次に示します。The following example shows a simple variable definition:

"variables": {
  "webSiteName": "[concat(parameters('siteNamePrefix'), uniqueString(resourceGroup().id))]",
},

変数定義の詳細については、「Azure Resource Manager テンプレートの変数セクション」をご覧ください。For information about defining variables, see Variables section of Azure Resource Manager templates.

FunctionsFunctions

テンプレート内で、独自の関数を作成できます。Within your template, you can create your own functions. これらの関数は、テンプレートで使用可能です。These functions are available for use in your template. 通常は、テンプレート内で繰り返したくない複雑な式を定義します。Typically, you define complicated expression that you don't want to repeat throughout your template. ユーザー定義関数は、テンプレートでサポートされている関数および式から作成します。You create the user-defined functions from expressions and functions that are supported in templates.

ユーザー関数を定義するときに、適用される制限がいくつかあります。When defining a user function, there are some restrictions:

  • 関数は変数にアクセスできません。The function can't access variables.
  • 関数は、テンプレート パラメーターにアクセスできません。The function can't access template parameters. つまり、パラメーター関数は、関数のパラメーターに制限されます。That is, the parameters function is restricted to function parameters.
  • 関数は、その他のユーザー定義関数を呼び出すことはできません。The function can't call other user-defined functions.
  • 関数は reference 関数を使用できません。The function can't use the reference function.
  • 関数のパラメーターでは既定値を指定できません。Parameters for the function can't have default values.

テンプレート関数との名前の競合を回避するために、お使いの関数には名前空間の値が必要です。Your functions require a namespace value to avoid naming conflicts with template functions. 次の例は、ストレージ アカウント名を返す関数を示しています。The following example shows a function that returns a storage account name:

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

関数を呼び出すには、次を使用します。You call the function with:

"resources": [
  {
    "name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2016-01-01",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "location": "South Central US",
    "tags": {},
    "properties": {}
  }
]

リソースResources

resources セクションでは、デプロイまたは更新されるリソースを定義します。In the resources section, you define the resources that are deployed or updated. このセクションは、複雑になりやすい部分です。適切な値を指定するためには、デプロイするリソースの種類を理解している必要があるためです。This section can get complicated because you must understand the types you're deploying to provide the right values.

"resources": [
  {
    "apiVersion": "2016-08-01",
    "name": "[variables('webSiteName')]",
    "type": "Microsoft.Web/sites",
    "location": "[resourceGroup().location]",
    "properties": {
      "serverFarmId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Web/serverFarms/<plan-name>"
    }
  }
],

詳細については、「Resources section of Azure Resource Manager templates (Azure Resource Manager テンプレートの resources セクション)」をご覧ください。For more information, see Resources section of Azure Resource Manager templates.

出力Outputs

[出力] セクションではデプロイから返される値を指定します。In the Outputs section, you specify values that are returned from deployment. たとえば、デプロイされたリソースにアクセスするための URI を返すことができます。For example, you could return the URI to access a deployed resource.

"outputs": {
  "newHostName": {
    "type": "string",
    "value": "[reference(variables('webSiteName')).defaultHostName]"
  }
}

詳細については、「Outputs section of Azure Resource Manager templates (Azure Resource Manager テンプレートの outputs セクション)」をご覧ください。For more information, see Outputs section of Azure Resource Manager templates.

テンプレートの制限Template limits

テンプレートのサイズを 1 MB に、各パラメーター ファイルのサイズを 64 KB に制限します。Limit the size of your template to 1 MB, and each parameter file to 64 KB. 1 MB の制限は、反復的なリソースの定義と変数およびパラメーターの値で拡張された後のテンプレートの最終的な状態に適用されます。The 1-MB limit applies to the final state of the template after it has been expanded with iterative resource definitions, and values for variables and parameters.

また、以下のように制限されます。You're also limited to:

  • パラメーター 256 個256 parameters
  • 変数 256 個256 variables
  • リソース (コピー数を含む) 800 個800 resources (including copy count)
  • 出力値 64 個64 output values
  • テンプレート式内で 24,576 文字24,576 characters in a template expression

入れ子になったテンプレートを使用すると、一部のテンプレートの制限を超過することができます。You can exceed some template limits by using a nested template. 詳細については、「Azure リソース デプロイ時のリンクされたテンプレートの使用」を参照してください。For more information, see Using linked templates when deploying Azure resources. パラメーター、変数、出力の数を減らすために、いくつかの値を 1 つのオブジェクトに結合することができます。To reduce the number of parameters, variables, or outputs, you can combine several values into an object. 詳しくは、パラメーターとしてのオブジェクトに関する記事をご覧ください。For more information, see Objects as parameters.

次の手順Next steps