ARM テンプレートの構造と構文について

この記事では、Azure Resource Manager テンプレート (ARM テンプレート) の構造について説明します。 テンプレートの各種セクションとそこで使用できるプロパティを紹介しています。

この記事は、ARM テンプレートにある程度慣れているユーザー向けです。 テンプレートの構造に関する詳細情報を提供します。 テンプレートの作成手順について説明したチュートリアルについては、「チュートリアル:初めての ARM テンプレートを作成してデプロイする」を参照してください。 Learn モジュールのガイド付きセットを使用して ARM テンプレートを学習するには、「ARM テンプレートを使用して Azure にリソースをデプロイして管理する」を参照してください。

ヒント

Bicep は、ARM テンプレートと同じ機能を提供しますが、構文がより使いやすい新しい言語です。 "コードとしてのインフラストラクチャ" のオプションを検討している場合は、Bicep を候補に入れることをお勧めします。

Bicep ファイルの要素の詳細については、「Bicep ファイルの構造と構文について」を参照してください。

テンプレートの形式

最も単純な構造のテンプレートは、次の要素で構成されます。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "",
  "contentVersion": "",
  "apiProfile": "",
  "definitions": { },
  "parameters": { },
  "variables": { },
  "functions": [ ],
  "resources": [ ], /* or "resources": { } with languageVersion 2.0 */
  "outputs": { }
}
要素名 必須 説明
$schema はい テンプレート言語のバージョンが記述されている JSON (JavaScript Object Notation) スキーマ ファイルの場所。 使用するバージョン番号は、デプロイのスコープと JSON エディターによって異なります。

Visual Studio Code を Azure Resource Manager ツール拡張機能と共に使用している場合は、リソース グループのデプロイの最新バージョンを使用します。
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

他のエディター (Visual Studio を含む) では、このスキーマを処理できない場合があります。 そうしたエディターの場合、次を使用します。
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

サブスクリプション デプロイの場合、次を使用します。
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

管理グループのデプロイの場合、次を使用します。
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

テナントのデプロイの場合、次を使用します。
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion いいえ テンプレートの言語バージョン。 languageVersion 2.0 の機能強化については、「languageVersion 2.0」を参照してください。
contentVersion はい テンプレートのバージョン (1.0.0.0 など)。 この要素には任意の値を指定できます。 この値を使用して、テンプレートの重要な変更を文書化します。 テンプレートを使用してリソースをデプロイする場合は、この値を使用して、適切なテンプレートが使用されていることを確認できます。
apiProfile いいえ リソースの種類に対する API のバージョンのコレクションとして機能する API バージョン。 この値を使用すると、テンプレートのリソースごとに API バージョンを指定しなくて済みます。 API プロファイルのバージョンを指定し、リソースの種類の API バージョンを指定しないと、Resource Manager では、プロファイルでそのリソースの種類に対して定義されている API バージョンが使用されます。

API プロファイル プロパティは、Azure Stack やグローバルな Azure など、さまざまな環境にテンプレートをデプロイする場合に特に便利です。 API プロファイルのバージョンを使用し、両方の環境でサポートされているバージョンがテンプレートで自動的に使用されるようにします。 現在の API プロファイルのバージョンおよびリソース プロファイルで定義されている API バージョンの一覧については、「API Profile (API プロファイル)」をご覧ください。

詳しくは、「API プロファイルを使用してバージョンを追跡する」をご覧ください。
定義 いいえ 配列とオブジェクトの値を検証するために使用されるスキーマ。 定義は languageVersion 2.0 でのみサポートされています。
parameters いいえ リソースのデプロイをカスタマイズするのにはデプロイを実行すると、提供されている値です。
variables いいえ テンプレート言語式を簡略化するためにテンプレート内で JSON フラグメントとして使用される値。
functions いいえ テンプレート内で使用できるユーザー定義関数。
resources はい リソース グループまたはサブスクリプション内でデプロイまたは更新されるリソースの種類。
outputs いいえ デプロイ後に返される値。

各要素には、設定できるプロパティがあります。 この記事では、テンプレートのセクションについて詳しく説明します。

定義

テンプレートの definitions セクションで、配列とオブジェクトの値を検証するために使用するスキーマを指定します。 DefinitionslanguageVersion 2.0 でのみ使用できます。

"definitions": {
  "<definition-name": {
    "type": "<data-type-of-definition>",
    "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>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the-type-definition>"
    }
  }
}
要素名 必須 説明
definition-name はい 型定義の名前。 有効な JavaScript 識別子で指定する必要があります。
type はい 型定義の種類。 使用できる型および値は、stringsecurestringintboolobjectsecureObjectarray です。 「ARM テンプレートのデータ型」を参照してください。
allowedValues いいえ 適切な値が確実に指定されるように、型定義に使用できる値の配列。
minValue いいえ int 型定義の最小値 (この値を含む)。
maxValue いいえ int 型定義の最大値 (この値を含む)。
minLength いいえ string 型、securestring 型、array 型定義の長さの最小値 (この値を含む)。
maxLength いいえ string、securestring、array の型定義の最大長 (この値を含みます)。
prefixItems いいえ 同じインデックスで配列の要素を検証するためのスキーマ。
項目 いいえ インデックスが prefixItems 制約の最大インデックスより大きい配列のすべての要素に適用されるスキーマ、またはインデックスが prefixItems 制約の最大インデックスより大きい配列の要素を制御するためのブール値。
properties いいえ オブジェクトを検証するためのスキーマ。
additionalProperties いいえ properties 制約でメンションされていないすべてのプロパティに適用されるスキーマ、または properties 制約で定義されていないプロパティを受け入れるためのブール値。
discriminator いいえ 識別子プロパティに基づいて適用するスキーマ。
nullable いいえ 値が null または省略可能であることを示すブール値。
description いいえ ポータルを通じてユーザーに表示される型定義の説明。 詳しくは、テンプレート内のコメントに関するページをご覧ください。

型定義の使用方法の例については、「ARM テンプレートの型定義」を参照してください。

Bicep の「ユーザー定義データ型」を参照してください。

パラメーター

テンプレートの parameters セクションでは、リソースをデプロイするときにどのような値を入力できるかを指定します。 テンプレートではパラメーターが 256 個に制限されます。 複数のプロパティを含むオブジェクトを使用すると、パラメーター数を減らすことができます。

パラメーターで使用可能なプロパティは次のとおりです。

"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>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the parameter>"
    }
  }
}
要素名 必須 説明
parameter-name はい パラメーターの名前。 有効な JavaScript 識別子で指定する必要があります。
type はい パラメーター値の型。 使用できる型および値は、stringsecurestringintboolobjectsecureObjectarray です。 「ARM テンプレートのデータ型」を参照してください。
defaultValue いいえ パラメーターに値が指定されない場合のパラメーターの既定値。
allowedValues いいえ 適切な値が確実に指定されるように、パラメーターに使用できる値の配列。
minValue いいえ int 型パラメーターの最小値。
maxValue いいえ int 型パラメーターの最大値。
minLength いいえ string 型、securestring 型、array 型パラメーターの長さの最小値 (この値を含む)。
maxLength いいえ string 型、securestring 型、array 型パラメーターの長さの最大値 (この値を含む)。
prefixItems いいえ 同じインデックスで配列の要素を検証するための型定義。 prefixItemslanguageVersion 2.0 でのみサポートされています。
項目 いいえ インデックスが prefixItems 制約の最大インデックスより大きい配列のすべての要素に適用されるスキーマ、またはインデックスが prefixItems 制約の最大インデックスより大きい配列の要素を制御するためのブール値。 itemslanguageVersion 2.0 でのみサポートされています。
properties いいえ オブジェクトを検証するためのスキーマ。 propertieslanguageVersion 2.0 でのみサポートされています。
additionalProperties いいえ properties 制約でメンションされていないすべてのプロパティに適用されるスキーマ、または properties 制約で定義されていないプロパティを受け入れるためのブール値。 additionalPropertieslanguageVersion 2.0 でのみサポートされています。
discriminator いいえ 識別子プロパティに基づいて適用するスキーマ。 discriminatorlanguageVersion 2.0 でのみサポートされています。
nullable いいえ 値が null または省略可能であることを示すブール値。 nullablelanguageVersion 2.0 でのみサポートされています。
description いいえ ポータルを通じてユーザーに表示されるパラメーターの説明。 詳しくは、テンプレート内のコメントに関するページをご覧ください。

パラメーターの使用方法の例については、「ARM テンプレートのパラメーター」を参照してください。

Bicep で、「 パラメーター」を参照してください。

変数

テンプレート内で使用できる値は、variables セクションで作成します。 必ずしも変数を定義する必要はありませんが、変数を定義することによって複雑な式が減り、テンプレートが単純化されることはよくあります。 各変数の形式は、いずれかのデータ型に一致します。 テンプレートでは変数が 256 個に制限されます。

次の例では、変数の定義に使用できるオプションを示します。

"variables": {
  "<variable-name>": "<variable-value>",
  "<variable-name>": {
    <variable-complex-type-value>
  },
  "<variable-object-name>": {
    "copy": [
      {
        "name": "<name-of-array-property>",
        "count": <number-of-iterations>,
        "input": <object-or-value-to-repeat>
      }
    ]
  },
  "copy": [
    {
      "name": "<variable-array-name>",
      "count": <number-of-iterations>,
      "input": <object-or-value-to-repeat>
    }
  ]
}

copy を使用して変数に複数の値を作成する方法については、「copy」をご覧ください。

変数の使用方法の例については、「ARM テンプレートの変数」を参照してください。

Bicep では、「 変数」を参照してください。

関数

テンプレート内で、独自の関数を作成できます。 これらの関数は、テンプレートで使用可能です。 通常は、テンプレート全体で繰り返したくない複雑な式を定義します。 ユーザー定義関数は、テンプレートでサポートされている関数および式から作成します。

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

  • 関数は変数にアクセスできません。
  • 関数は、関数内で定義されているパラメーターのみを使用できます。 ユーザー定義関数内で parameters 関数を使用する場合は、その関数のパラメーターに制限されます。
  • 関数は、その他のユーザー定義関数を呼び出すことはできません。
  • 関数は reference 関数を使用できません。
  • 関数のパラメーターでは既定値を指定できません。
"functions": [
  {
    "namespace": "<namespace-for-functions>",
    "members": {
      "<function-name>": {
        "parameters": [
          {
            "name": "<parameter-name>",
            "type": "<type-of-parameter-value>"
          }
        ],
        "output": {
          "type": "<type-of-output-value>",
          "value": "<function-return-value>"
        }
      }
    }
  }
],
要素名 必須 説明
namespace はい カスタム関数の名前空間。 テンプレート関数との名前の競合を回避するために使用します。
function-name はい カスタム関数の名前。 関数を呼び出すときに、関数名と名前空間を組み合わせます。 たとえば、uniqueName という名前の関数を名前空間 contoso で呼び出すには、"[contoso.uniqueName()]" を使用します。
parameter-name いいえ カスタム関数内で使用されるパラメーターの名前。
parameter-value いいえ パラメーター値の型。 使用できる型および値は、stringsecurestringintboolobjectsecureObjectarray です。
output-type はい 出力値の型。 出力値では、関数入力パラメーターと同じ型がサポートされています。
output-value はい 評価され、関数から返されるテンプレート言語式。

カスタム関数の使用方法の例については、「ARM テンプレートのユーザー定義関数」を参照してください。

Bicep では、ユーザー定義関数はサポートされていません。 Bicep では、さまざまな関数演算子がサポートされています。

リソース

resources セクションでは、デプロイまたは更新されるリソースを定義します。 テンプレートではリソースが 800 個に制限されます。

リソースは、次の構造で定義します。

"resources": [
  {
    "condition": "<true-to-deploy-this-resource>",
    "type": "<resource-provider-namespace/resource-type-name>",
    "apiVersion": "<api-version-of-resource>",
    "name": "<name-of-the-resource>",
    "comments": "<your-reference-notes>",
    "location": "<location-of-resource>",
    "dependsOn": [
        "<array-of-related-resource-names>"
    ],
    "tags": {
        "<tag-name1>": "<tag-value1>",
        "<tag-name2>": "<tag-value2>"
    },
    "identity": {
      "type": "<system-assigned-or-user-assigned-identity>",
      "userAssignedIdentities": {
        "<resource-id-of-identity>": {}
      }
    },
    "sku": {
        "name": "<sku-name>",
        "tier": "<sku-tier>",
        "size": "<sku-size>",
        "family": "<sku-family>",
        "capacity": <sku-capacity>
    },
    "kind": "<type-of-resource>",
    "scope": "<target-scope-for-extension-resources>",
    "copy": {
        "name": "<name-of-copy-loop>",
        "count": <number-of-iterations>,
        "mode": "<serial-or-parallel>",
        "batchSize": <number-to-deploy-serially>
    },
    "plan": {
        "name": "<plan-name>",
        "promotionCode": "<plan-promotion-code>",
        "publisher": "<plan-publisher>",
        "product": "<plan-product>",
        "version": "<plan-version>"
    },
    "properties": {
        "<settings-for-the-resource>",
        "copy": [
            {
                "name": ,
                "count": ,
                "input": {}
            }
        ]
    },
    "resources": [
        "<array-of-child-resources>"
    ]
  }
]
要素名 必須 説明
condition いいえ このデプロイの間にリソースがプロビジョニングされるかどうかを示すブール値。 true の場合、デプロイ時にリソースが作成されます。 false の場合、このデプロイでは、リソースはスキップされます。 条件をご覧ください。
type はい リソースの種類。 この値は、リソース プロバイダーの名前空間とリソースの種類を組み合わせたものです (例: Microsoft.Storage/storageAccounts)。 使用可能な値を確認するには、テンプレートのリファレンスに関する記事をご覧ください。 子リソースの場合、type の形式は、親リソース内に入れ子にされているか、親リソースの外側で定義されているかによって変わります。 子リソースの名前と種類の設定に関する記事を参照してください。
apiVersion はい リソースの作成に使用する REST API バージョン。 新しいテンプレートを作成するときは、デプロイするリソースの最新バージョンをこの値に設定します。 テンプレートが必要に応じて動作する限り、同じ API バージョンを使用し続けてください。 同じ API バージョンを使用し続けることで、新しい API バージョンにより、テンプレートの動作方法が変更されるリスクを最小限に抑えることができます。 新しいバージョンで導入された新機能を使用する場合にのみ、API バージョンを更新することを検討してください。 使用可能な値を確認するには、テンプレートのリファレンスに関する記事をご覧ください。
name はい リソースの名前。 この名前は、RFC3986 で定義されている URI コンポーネントの制限に準拠する必要があります。 リソース名を外部に公開する Azure サービスでは、名前が別の ID になりすますことがないように、その名前を検証します。 子リソースの場合、name の形式は、親リソース内に入れ子にされているか、親リソースの外側で定義されているかによって変わります。 子リソースの名前と種類の設定に関する記事を参照してください。
comments いいえ テンプレート内にドキュメント化するリソースについてのメモ。 詳しくは、テンプレート内のコメントに関するページをご覧ください。
location 場合により異なる 指定されたリソースのサポートされている地理的な場所。 利用可能な任意の場所を選択できますが、一般的に、ユーザーに近い場所を選択します。 また、通常、相互に対話するリソースを同じリージョンに配置します。 ほとんどのリソースの種類では場所が必要となりますが、場所を必要としない種類 (ロールの割り当てなど) もあります。 リソースの場所の設定に関するページを参照してください。
dependsOn いいえ このリソースが配置される前に配置される必要があるリソース。 Resource Manager により、リソース間の依存関係が評価され、リソースが正しい順序でデプロイされます。 相互依存していないリソースは、平行してデプロイされます。 値には、リソース名またはリソースの一意識別子のコンマ区切りリストを指定できます。 このテンプレートに配置されたリソースのみをリストします。 このテンプレートで定義されていないリソースは、既に存在している必要があります。 不要な依存関係は追加しないでください。こうした依存関係によりデプロイの速度が遅くなり、循環依存関係を作成されることがあります。 依存関係の設定のガイダンスについては、「ARM テンプレートでのリソース デプロイ順序の定義」を参照してください。
tags いいえ リソースに関連付けられたタグ。 サブスクリプション間でリソースを論理的に編成するためのタグを適用します。
identity いいえ 一部のリソースでは、Azure リソースのマネージド ID がサポートされます。 これらのリソースには、リソース宣言のルート レベルに ID オブジェクトがあります。 ID がユーザー割り当てかシステム割り当てかを設定できます。 ユーザー割り当て ID の場合は、ID のリソース ID の一覧を指定します。 キーをリソース ID に設定し、値を空のオブジェクトに設定します。 詳細については、「テンプレートを使用して Azure VM で Azure リソースのマネージド ID を構成する」を参照してください。
sku いいえ 一部のリソースでは、デプロイする SKU を定義する値が許可されます。 たとえば、ストレージ アカウントの冗長性の種類を指定することができます。
kind いいえ 一部のリソースでは、デプロイするリソースの種類を定義する値が許可されます。 たとえば、作成する Azure Cosmos DB インスタンスの種類を指定することができます。
scope いいえ スコープ プロパティは、拡張リソースの種類でのみ使用できます。 デプロイ スコープとは異なるスコープを指定するときに使用します。 「ARM テンプレートで拡張リソースのスコープを設定する」をご覧下さい。
copy いいえ 複数のインスタンスが必要な場合に作成するリソースの数。 既定のモードはパラレルです。 すべてのリソースを同時にデプロイする必要がない場合は、シリアル モードを指定します。 詳しくは、「Azure Resource Manager でリソースの複数のインスタンスを作成する」をご覧ください。
plan いいえ 一部のリソースでは、デプロイするプランを定義する値が許可されます。 たとえば、仮想マシンのマーケットプレース イメージを指定することができます。
properties いいえ リソース固有の構成設定。 properties の値は、リソースを作成するために REST API 操作 (PUT メソッド) の要求本文に指定した値と同じです。 コピー配列を指定して、1 つのプロパティの複数のインスタンスを作成することもできます。 使用可能な値を確認するには、テンプレートのリファレンスに関する記事をご覧ください。
resources いいえ 定義されているリソースに依存する子リソース。 親リソースのスキーマで許可されているリソースの種類のみを指定します。 親リソースへの依存関係は示されません。 この依存関係は明示的に定義する必要があります。 子リソースの名前と種類の設定に関する記事を参照してください。

ARM JSON テンプレートで Bicep シンボリック名をサポートするには、バージョン 2.0 以降で languageVersion を追加し、リソース定義を配列からオブジェクトに変更します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

詳しくは、リソースに関する記事をご覧ください。

Bicep で、 リソースに関するページを参照してください。

出力

outputs セクションではデプロイから返される値を指定します。 通常は、デプロイされたリソースからの値を返します。 テンプレートでは出力が 64 個に制限されます。

次の例では、出力の定義の構造を示します。

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
要素名 必須 説明
output-name はい 出力値の名前。 有効な JavaScript 識別子で指定する必要があります。
condition いいえ この出力値が返されたかどうかを示すブール値。 true の場合、値はデプロイの出力に含まれています。 false の場合、このデプロイでは、出力値はスキップされます。 指定しない場合、既定値は true です。
type はい 出力値の型。 出力値では、テンプレート入力パラメーターと同じ型がサポートされています。 出力の種類に securestring を指定した場合、値はデプロイ履歴に表示されず、他のテンプレートから取得できません。 複数のテンプレートでシークレット値を使用するには、シークレットをキー コンテナーに格納し、パラメーター ファイルでそのシークレットを参照します。 詳細については、「デプロイ時に Azure Key Vault を使用して、セキュリティで保護されたパラメーター値を渡す」を参照してください
value いいえ 評価され、出力値として返されるテンプレート言語式。 または copy を指定します。
copy いいえ 出力に対して複数の値を返すために使用されます。 または copy を指定します。 詳細については、「ARM テンプレートでの出力の反復処理」を参照してください。

出力の使用方法の例については、「ARM テンプレートの出力」を参照してください。

Bicep で、出力に関するページを 参照してください。

コメントとメタデータ

テンプレートにコメントとメタデータを追加するためのオプションがいくつかあります。

説明

インライン コメントについては、// または /* ... */ のいずれかを使用できます。 Visual Studio Code で、コメントを含むパラメーター ファイルをコメント付き JSON (JSONC) のファイルの種類として保存します。そうしないと、"コメントが JSON で許可されていません" というエラー メッセージが表示されます。

Note

Azure コマンド ライン インターフェイスを使用してコメント付きテンプレートをデプロイする場合は、バージョン 2.3.0 以降を使用し、--handle-extended-json-format スイッチを指定します。

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[parameters('location')]", //defaults to resource group location
  "dependsOn": [ /* storage account and network interface must be deployed first */
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Visual Studio Code では、Azure Resource Manager ツール拡張機能により、ARM テンプレートが自動的に検出され、言語モードが変更されます。 Visual Studio Code の右下隅に [Azure Resource Manager テンプレート] が表示されている場合は、インライン コメントを使用できます。 インライン コメントは無効としてマークされなくなります。

Azure Resource Manager テンプレート モードの Visual Studio Code のスクリーンショット。

Bicep で、コメントに関するページを参照してください。

Metadata

metadata オブジェクトは、テンプレート内のほとんどどこにでも追加できます。 このオブジェクトは、Resource Manager では無視されますが、お使いの JSON エディターによっては、プロパティが無効であると警告される場合があります。 オブジェクトで、必要なプロパティを定義します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "comments": "This template was developed for demonstration purposes.",
    "author": "Example Name"
  },

parametersの場合、description プロパティを使って metadata オブジェクトを追加します。

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "User name for the Virtual Machine."
    }
  },

ポータルからテンプレートをデプロイする場合、説明で指定したテキストがそのパラメーターのヒントとして自動的に使用されます。

Azure portal のパラメータのヒントを示すスクリーンショット。

resources の場合、comments 要素または metadata オブジェクトを追加します。 次の例は、comments 要素と metadata オブジェクトの両方を示しています。

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "[format('{0}{1}', 'storage', uniqueString(resourceGroup().id))]",
    "comments": "Storage account used to store VM disks",
    "location": "[parameters('location')]",
    "metadata": {
      "comments": "These tags are needed for policy compliance."
    },
    "tags": {
      "Dept": "[parameters('deptName')]",
      "Environment": "[parameters('environment')]"
    },
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "properties": {}
  }
]

outputs の場合、metadata オブジェクトを出力値に追加します。

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]",
    "metadata": {
      "comments": "Return the fully qualified domain name"
    }
  },

metadata オブジェクトをユーザー定義関数に追加することはできません。

複数行の文字列

文字列を複数の行に分割することができます。 例として、次の JSON の例の location プロパティといずれかのコメントを参照してください。

Note

マルチライン ストリングを使用してテンプレートをデプロイするには、Azure PowerShell または Azure CLI を使用します。 CLI の場合は、バージョン 2.3.0 以降を使用し、--handle-extended-json-format スイッチを指定します。

Azure portal、DevOps パイプライン、または REST API を使用してテンプレートをデプロイする場合、マルチライン ストリングはサポートされません。

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Bicep で、 マルチライン ストリングに関するページを参照してください。

languageVersion 2.0

Note

運用環境では、試験的な機能をいつでも変更できる可能性があるため、-experimental で終わる languageVersion は使用しないことをお勧めします。

Note

Visual Studio Code 用 Azure Resource Manager Tools 拡張機能の現在のリリースでは、languageVersion 2.0 で行われた拡張機能は認識されません。

languageVersion 2.0 を使用するには、"languageVersion": "2.0" を以下のテンプレートに追加します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

languageVersion 2.0 に付属する機能強化と変更は以下のとおりです。

  • ARM JSON テンプレートでシンボリック名を使用します。 詳細については、「シンボリック名を使用する」を参照してください。
  • リソース コピー ループでシンボリック名を使用します。 「シンボル名を使用する」を参照してください。
  • dependsOn 配列でシンボリック名を使用します。 「DependsOn」と「ループ内のリソースへの依存」を参照してください。
  • reference 関数でリソース名の代わりにシンボリック名を使用します。 参考資料をご覧ください。
  • リソース コレクションのランタイム状態を表すオブジェクトの配列を返す references() 関数。 「references」を参照してください。
  • リソースをデプロイするのではなく、ARM が読み取る既存のリソースを宣言するには、'既存の' リソース プロパティを使用します。 「既存のリソースを宣言する」を参照してください。
  • ユーザー定義型を作成します。 「型定義」を参照してください。
  • parametersoutputs で使用される追加の集計型検証制約。
  • expressionEvaluationOptions プロパティの既定値は inner です。 値 outer はブロックされます。 「入れ子になったテンプレートでの式の評価のスコープ」を参照してください。
  • この deployment 関数は、プロパティの限られたサブセットを返します。 「デプロイ」を参照してください。
  • シンボリック名のデプロイでデプロイのリソースが使用されている場合は、apiVersion 2020-09-01 以降を使用します。
  • リソース定義では、式内の値の二重エスケープは不要になります。 「エスケープ文字」を参照してください。

次のいずれかの Bicep 機能を使用すると、言語バージョン 2.0 コード生成が自動的に有効になります。

次のステップ