Resource Manager - テンプレートの階層化(テンプレートのリンク)
概要
チュートリアルを参考にARMテンプレートの階層化を行う
Childテンプレートからテンプレート スペックを生成し、
Parentテンプレートでテンプレート スペックのリソース IDを使用してリンクする
ファイル構成
├─ storage/
│ └─ template.json # Childテンプレート
│
├─ template.json # Parentテンプレート
└─ parameters.json # パラメータ定義
前提
- デプロイ先のリソースグループの作成
- VSCode拡張機能
Azure Resource Manager (ARM) Tools
のインストール
Azure Resource Manager (ARM) Tools
のインストールAzure Resource Manager (ARM) Tools
でARM テンプレートのひな型作成、値の検証、入力候補表示等が可能(参考)
テンプレート スペックの生成
Childテンプレートからテンプレート スペックを生成する
Childテンプレート(storage/template.json
)
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": { // Parentテンプレートから値を渡す
"type": "string"
},
"location": { // Parentテンプレートから値を渡す
"type": "string"
},
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS"
}
},
"functions": [],
"variables": {
"storageAccountName": "[concat(parameters('prefix'), 'storageaccount')]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"kind": "Storage",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
}
}
],
"outputs": {}
}
形式はARMテンプレートと同じで、ストレージアカウントを定義し、
parameters
のprefix
, location
は、Parentテンプレートから値を渡すためdefaultValue
は設定しない
デプロイ
az ts create --name storageSpec --version "1.0" --resource-group arm-test-resource-group --template-file "storage\template.json" --yes
--name
で指定した名前と、--version
で指定したバージョンは、Parentテンプレートデプロイ時に使用する
--yes
オプションで既にリソースが存在する場合に上書きの確認ダイアログを表示しないようにしている
ARMテンプレートからリソースの生成
Parentテンプレート(template.json
)
template.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string",
"defaultValue": "prefix"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"tsVersion": { // テンプレートスペックデプロイ時に指定した値 ※デプロイ時にparameters.jsonの値で上書きする
"type": "string",
"defaultValue": "1.0"
},
"tsName": { // テンプレートスペックデプロイ時に指定した値 ※デプロイ時にparameters.jsonの値で上書きする
"type": "string",
"defaultValue": "storageSpec"
}
},
"functions": [],
"variables": {},
"resources": [
{
"name": "StorageDeployment",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"id": "[resourceId('Microsoft.Resources/templateSpecs/versions', parameters('tsName'), parameters('tsVersion'))]" // テンプレート スペックのリソースID
},
"parameters": { // Childテンプレートに渡すパラメータ
"prefix": {"value": "[parameters('prefix')]"},
"location": {"value": "[parameters('location')]"}
}
}
}
],
"outputs": {}
}
template.json
){
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string",
"defaultValue": "prefix"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"tsVersion": { // テンプレートスペックデプロイ時に指定した値 ※デプロイ時にparameters.jsonの値で上書きする
"type": "string",
"defaultValue": "1.0"
},
"tsName": { // テンプレートスペックデプロイ時に指定した値 ※デプロイ時にparameters.jsonの値で上書きする
"type": "string",
"defaultValue": "storageSpec"
}
},
"functions": [],
"variables": {},
"resources": [
{
"name": "StorageDeployment",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"id": "[resourceId('Microsoft.Resources/templateSpecs/versions', parameters('tsName'), parameters('tsVersion'))]" // テンプレート スペックのリソースID
},
"parameters": { // Childテンプレートに渡すパラメータ
"prefix": {"value": "[parameters('prefix')]"},
"location": {"value": "[parameters('location')]"}
}
}
}
],
"outputs": {}
}
Childテンプレートから生成したテンプレート スペックのリソースIDを指定して、テンプレートをリンクする
resourceId()
関数にリソースタイプ(Microsoft.Resources/templateSpecs/versions
)、リソース名、リソースバージョンをしてリソースIDを取得する
パラメータ定義(parameters.json
)
{
"prefix": {"value": "armtest2"},
"tsVersion": {"value": "1.0"}
}
デプロイ
az deployment group create --name test-deploy --resource-group arm-test-resource-group --template-file template.json --parameters parameters.json
デプロイ結果
Author And Source
この問題について(Resource Manager - テンプレートの階層化(テンプレートのリンク)), 我々は、より多くの情報をここで見つけました https://qiita.com/takmot/items/895d4afe19ef20d0f1dd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .