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.

クイック スタートとチュートリアルQuickstarts and tutorials

次のクイック スタートとチュートリアルを使用して、Resource Manager テンプレートの開発方法を学ぶことができます。Use the following quickstarts and tutorials to learn how to develop resource manager templates:

  • クイック スタートQuickstarts

    タイトルTitle 説明Description
    Azure Portal の使用Use the Azure portal ポータルを使用してテンプレートを生成します。また、テンプレートを編集してデプロイするプロセスについて説明しています。Generate a template using the portal, and understand the process of editing and deploying the template.
    Visual Studio Code を使用するUse Visual Studio Code Visual Studio Code を使用してテンプレートを作成および編集します。また、Azure Cloud Shell を使用してテンプレートをデプロイする方法を説明しています。Use Visual Studio Code to create and edit templates, and how to use the Azure Cloud shell to deploy templates.
    Visual Studio を使用するUse Visual Studio Visual Studio を使用してテンプレートを作成、編集、デプロイします。Use Visual Studio to create, edit, and deploy templates.
  • チュートリアルTutorials

    タイトルTitle 説明Description
    テンプレート リファレンスの利用Utilize template reference テンプレートを開発するためにテンプレート リファレンス ドキュメントを利用します。Utilize the template reference documentation to develop templates. このチュートリアルでは、ストレージ アカウントのスキーマを確認し、その情報を使用して、暗号化されたストレージ アカウントを作成します。In the tutorial, you find the storage account schema, and use the information to create an encrypted storage account.
    複数のインスタンスの作成Create multiple instances Azure リソースの複数のインスタンスを作成します。Create multiple instances of Azure resources. このチュートリアルでは、ストレージ アカウントの複数のインスタンスを作成します。In the tutorial, you create multiple instances of storage account.
    リソースのデプロイ順序の設定Set resource deployment order リソースの依存関係を定義します。Define resource dependencies. このチュートリアルでは、仮想ネットワーク、仮想マシン、および依存する Azure リソースを作成します。In the tutorial, you create a virtual network, a virtual machine, and the dependent Azure resources. 依存関係を定義する方法を説明しています。You learn how the dependencies are defined.
    使用条件Use conditions いくつかのパラメーター値に基づいてリソースをデプロイします。Deploy resources based on some parameter values. このチュートリアルでは、新しいストレージ アカウントを作成するか、パラメーターの値に基づいて既存のストレージ アカウントを使用するためのテンプレートを定義します。In the tutorial, you define a template to create a new storage account or use an existing storage account based on the value of a parameter.
    キー コンテナーの統合Integrate key vault Azure Key Vault からシークレット/パスワードを取得します。Retrieve secrets/passwords from Azure Key Vault. このチュートリアルでは、仮想マシンを作成します。In the tutorial, you create a virtual machine. 仮想マシンの管理者のパスワードは、キー コンテナーから取得されます。The virtual machine administrator password is retrieved from a Key Vault.
    リンク済みテンプレートを作成するCreate linked templates テンプレートをモジュール化し、テンプレートから他のテンプレートを呼び出します。Modularize templates, and call other templates from a template. このチュートリアルでは、仮想ネットワーク、仮想マシン、および依存するリソースを作成します。In the tutorial, you create a virtual network, a virtual machine, and the dependent resources. 依存するストレージ アカウントは、リンクされたテンプレートで定義されます。The dependent storage account is defined in a linked template.
    仮想マシン拡張機能のデプロイDeploy virtual machine extensions 拡張機能を使用して、デプロイ後タスクを実行します。Perform post-deployment tasks by using extensions. このチュートリアルでは、仮想マシンに Web サーバーをインストールするために、カスタム スクリプト拡張機能をデプロイします。In the tutorial, you deploy a customer script extension to install web server on the virtual machine.
    SQL 拡張機能のデプロイDeploy SQL extensions 拡張機能を使用して、デプロイ後タスクを実行します。Perform post-deployment tasks by using extensions. このチュートリアルでは、仮想マシンに Web サーバーをインストールするために、カスタム スクリプト拡張機能をデプロイします。In the tutorial, you deploy a customer script extension to install web server on the virtual machine.
    安全なデプロイ プラクティスの使用Use safe deployment practices Azure Deployment Manager を使用します。Use Azure Deployment manager.

これらのチュートリアルは、Resource Manager テンプレート開発の主要な概念について、個別にまたはシリーズとして使用できます。These tutorials can be used individually, or as a series to learn the major Resource Manager template development concepts.

テンプレートの形式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>"
    }
  }
],

デプロイ時に条件付きでリソースを含めたり除外したりするには、Condition 要素を使用します。To conditionally include or exclude a resource during deployment, use the Condition element. resources セクションの詳細については、「Resources section of Azure Resource Manager templates (Azure Resource Manager テンプレートの resources セクション)」をご覧ください。For more information about the resources section, 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