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 で行われた拡張機能は認識されません。
テンプレート内のリソースは 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]"
}
}
}
既存のリソースでは、type
、apiVersion
および name
以外のプロパティを定義する必要はありません。
次のステップ
- リソースを条件付きでデプロイするには、「ARM テンプレートでの条件付きデプロイ」を参照してください。
- リソースの依存関係を設定するには、「ARM テンプレートでのリソース デプロイ順序の定義」を参照してください。