Azure Resource Manager テンプレート (ARM テンプレート) を使用してリソースをデプロイするには、リソース宣言を追加します。 JSON テンプレートで resources 配列を使用します。
languageVersion 2.0 では、ARM JSON テンプレートの機能強化 (リソース宣言を配列からオブジェクトに変更するなど) のリストが作成されています。 この記事で示すほとんどのサンプルでは、引き続き配列 resources 使用されています。 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 テンプレートでシンボリック名をサポートするには、バージョン languageVersion で 2.0 を追加し、リソース定義を配列からオブジェクトに変更します。 テンプレートに 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 関数では、前の例で示したように、リソースのシンボリック名を使用できます。 参照関数では、リソースの名前を使用できなくなりました (たとえば、 reference(parameters('storageAccountName')) 許可されていません)。
シンボリック名デプロイメントで Deployments リソース を使用する場合は、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 テンプレートでリソースをデプロイする順序を定義する」を参照してください。