次の方法で共有


ARM テンプレートでのリソースの宣言

Azure Resource Manager テンプレート (ARM テンプレート) を使用してリソースをデプロイするには、リソース宣言を追加します。 JSON テンプレート内で resources 配列を使用します。

languageVersion 2.0 では、リソース宣言を配列から オブジェクトに変更するなど、ARM JSON テンプレートの機能強化の一覧が作成されます。 この記事で示しているほとんどのサンプルでは、引き続き resources 配列を使用しています。 languageVersion 2.0 固有の情報については、シンボリック名を使用する を参照してください。

Note

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

ヒント

ARM テンプレートと同じ機能を備え、構文も使いやすいため、Bicep をお勧めします。 詳細については、「リソース宣言」を参照してください。

テンプレート内のリソースは 800 個に制限されています。 詳細については、「テンプレートの制限」を参照してください。

リソースの種類とバージョンの設定

テンプレートにリソースを追加する際には、まずリソースの種類と API バージョンを設定します。 これらの値によって、リソースで使用できるその他のプロパティが決まります。

次の例は、ストレージ アカウントのリソースの種類と API バージョンを設定する方法を示したものです。 この例は、リソース宣言の内容を完全に示したものではありません。

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

リソース名を設定する

各リソースには名前があります。 リソース名を設定する際には、リソース名の規則と制限事項に注意してください。

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

場所の設定

多くのリソースには場所が必要です。 リソースに場所が必要かどうかは、Intellisense またはテンプレート参照を使用して判断できます。 次の例では、ストレージ アカウントに使用される location パラメーターを追加しています。

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

詳細については、「ARM テンプレートでリソースの場所を設定する」を参照してください。

タグを設定する

デプロイ時には、リソースにタグを適用することができます。 タグは、デプロイされたリソースを論理的に整理するために役立ちます。 タグを指定するさまざまな方法の例については、ARM テンプレートのタグに関する記事を参照してください。

リソース固有のプロパティを設定する

上記のプロパティは、ほとんどの種類のリソースに共通するものです。 これらの値を設定した後、デプロイするリソースの種類に固有のプロパティを設定する必要があります。

使用可能なプロパティと必要なプロパティを特定するには、Intellisense またはテンプレート参照を使用します。 次の例では、ストレージ アカウントの残りのプロパティを設定しています。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

シンボリック名を使用する

Bicep では、各リソース定義にシンボリック名があります。 シンボリック名は、Bicep ファイルの他の部分からリソースを参照するために使用されます。 ARM JSON テンプレートで シンボリック名をサポートするには、バージョン 2.0 以降で languageVersion を追加し、リソース定義を配列からオブジェクトに変更します。 テンプレートに languageVersion が指定されている場合は、ルート レベルのリソースにシンボリック名を指定する必要があります。 次に例を示します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

上記の JSON は、次の JSON に書き込むことができます:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

シンボリック名は大文字と小文字が区別されます。 シンボリック名に使用できる文字は、文字、数字、および _ です。 シンボリック名はテンプレート内で一意である必要がありますが、テンプレート内の変数名、パラメーター名、出力名と重複する可能性があります。 次の例では、ストレージ アカウント リソースのシンボリック名の名前は出力と同じです。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

参照 関数では、前の例に示すように、リソースのシンボリック名を使用できます。 参照関数では、リソースの名前を使用できなくなりました。たとえば、reference(parameters('storageAccountName')) は許可されていません。

シンボリック名のデプロイで デプロイのリソース が使用されている場合は、apiVersion 2020-09-01 以降を使用します。

既存のリソースの宣言

languageVersion 2.0を使用し、リソース宣言にシンボリック名を使用すると、既存のリソースを宣言できます。 "existing": true の最上位リソース プロパティを使用すると、ARM は次の例に示すように、リソースをデプロイするのではなく、読み取りを行います:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

既存のリソースでは、typeapiVersion および name 以外のプロパティを定義する必要はありません。

次のステップ