1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Resource Manager - テンプレートの階層化(テンプレートのリンク)

Posted at

概要

チュートリアルを参考にARMテンプレートの階層化を行う

Childテンプレートからテンプレート スペックを生成し、
Parentテンプレートでテンプレート スペックのリソース IDを使用してリンクする

ファイル構成

  ├─ storage/
  │   └─ template.json  # Childテンプレート
  │
  ├─ template.json      # Parentテンプレート
  └─ parameters.json    # パラメータ定義

前提

  • デプロイ先のリソースグループの作成
  • VSCode拡張機能Azure Resource Manager (ARM) Toolsのインストール

Azure Resource Manager (ARM) ToolsでARM テンプレートのひな型作成、値の検証、入力候補表示等が可能(参考

image-20211125112244786.png

テンプレート スペックの生成

Childテンプレートからテンプレート スペックを生成する

Childテンプレート(storage/template.json

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テンプレートと同じで、ストレージアカウントを定義し、
parametersprefix, 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": {}
}

Childテンプレートから生成したテンプレート スペックのリソースIDを指定して、テンプレートをリンクする
resourceId()関数にリソースタイプ(Microsoft.Resources/templateSpecs/versions)、リソース名、リソースバージョンをしてリソースIDを取得する

パラメータ定義(parameters.json

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

デプロイ結果

image-20211128155513225.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?