テンプレート コンポーネントの詳細
Azure Resource Manager テンプレートは JSON で記述されており、格納データをオブジェクト (仮想マシンなど) としてテキストで表すことができます。
基本的に、"JSON ドキュメント" はキーと値のペアのコレクションです。 各キーは文字列であり、次の値を指定できます。
- 文字列。
- 数値。
- ブール式です。
- 値の一覧。
- オブジェクト (他のキーと値のペアのコレクション)。
Resource Manager テンプレートには、JSON 表記を使用して表現されているが、JSON 言語自体には関係のないセクションを含めることができます。
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
各セクションについてもう少し詳しく確認しましょう。
パラメーター
このセクションでは、テンプレートの実行時に構成できる値を指定します。
たとえば、テンプレート ユーザーがユーザー名、パスワード、またはドメイン名を設定できるようにすることができます。
次の例では 2 つのパラメーターが示されています。1 つは仮想マシン (VM) のユーザー名用で、もう 1 つはそのパスワード用です。
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
}
}
変数
ここでは、テンプレート全体で使用される値を定義します。
変数を使用すると、テンプレートの保守が簡単になります。
たとえば、ストレージ アカウント名を変数として 1 回定義すると、テンプレート全体でその変数を使用できます。
ストレージ アカウント名が変わった場合、必要なのは変数を 1 回更新することだけです。
次の例では、VM のネットワーク機能を記述するいくつかの変数が示されています。
"variables": {
"nicName": "myVMNic",
"addressPrefix": "10.0.0.0/16",
"subnetName": "Subnet",
"subnetPrefix": "10.0.0.0/24",
"publicIPAddressName": "myPublicIP",
"virtualNetworkName": "MyVNET"
}
関数
このセクションでは、テンプレート全体で繰り返し記述したくないプロシージャを定義します。
変数と同じように、関数を使用するとテンプレートの保守が簡単になります。
次に示すのは、グローバルに一意の名前付け要件を持つリソースを作成するときに使用する一意の名前を作る関数を作成する例です。
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
リソース
このセクションでは、デプロイを構成する Azure リソースを定義します。
次に、パブリック IP アドレス リソースを作成する例を示します。
{
"type": "Microsoft.Network/publicIPAddresses",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"apiVersion": "2018-08-01",
"properties": {
"publicIPAllocationMethod": "Dynamic",
"dnsSettings": {
"domainNameLabel": "[parameters('dnsLabelPrefix')]"
}
}
}
ここで、リソースの種類は Microsoft.Network/publicIPAddresses
です。
その name は変数セクションから読み取られ、その location つまり "Azure リージョン" は parameters セクションから読み取られます。
リソースの種類は時間と共に変化する可能性があるので、apiVersion
では使用するリソースの種類のバージョンが参照されています。
リソースの種類が変化するにつれて、最新の機能を使用するようにテンプレートを変更することができます。
出力
このセクションでは、テンプレートの実行時に受け取りたいすべての情報を定義します。
たとえば、デプロイが実行されるまでわからない情報である、VM の IP アドレスまたは完全修飾ドメイン名 (FQDN) を受け取ることができます。
この例では、hostname という名前の出力が示されています。
FQDN の値は、VM のパブリック IP アドレスの設定から読み取られます。
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
}
}