クイックスタート: テンプレート スペックの作成とデプロイ

このクイックスタートでは、Azure Resource Manager テンプレート (ARM テンプレート) をテンプレート スペックにパッケージ化する方法について説明します。次に、そのテンプレート スペックをデプロイします。テンプレート スペックには、ストレージ アカウントをデプロイする ARM テンプレートが含まれています。

ヒント

ARM テンプレートと同じ機能を備え、構文も使いやすいため、Bicep をお勧めします。 詳しくは、「クイックスタート: Bicep を使用してテンプレート スペックを作成してデプロイする」を参照してください。

前提条件

アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます

Note

Azure PowerShell でテンプレート スペックを使用するには、バージョン 5.0.0 以降をインストールする必要があります。 Azure CLI でこれを使用するには、バージョン 2.14.2 以降を使用します。

テンプレートの作成

テンプレート スペックは、ローカル テンプレートから作成します。 次のテンプレートをコピーし、azuredeploy.json というファイル名でローカルに保存します。 このクイックスタートでは、パス c:\Templates\azuredeploy.json に保存したことを想定していますが、任意のパスを使用できます。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.13.1.58284",
      "templateHash": "13120038605368246703"
    }
  },
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GRS",
        "Standard_GZRS",
        "Standard_LRS",
        "Standard_RAGRS",
        "Standard_RAGZRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The storage account location."
      }
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]",
      "metadata": {
        "description": "The name of the storage account"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[parameters('storageAccountName')]"
    },
    "storageAccountId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    }
  }
}

テンプレート スペックを作成する

テンプレート スペックは、Microsoft.Resources/templateSpecs という名前のリソースの種類です。 テンプレート スペックを作成するには、PowerShell、Azure CLI、ポータル、または ARM テンプレートを使用できます。

  1. テンプレート スペックを含む新しいリソース グループを作成します。

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location westus2
    
  2. そのリソース グループ内にテンプレート スペックを作成します。 新しいテンプレート スペックに storageSpec という名前を付けます。

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "1.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    

テンプレート スペックのデプロイ

テンプレート スペックをデプロイするには、テンプレートのデプロイに使用するのと同じデプロイ コマンドを使用します。 デプロイするテンプレート スペックのリソース ID を渡します。

  1. 新しいストレージ アカウントを格納するリソース グループを作成します。

    New-AzResourceGroup `
      -Name storageRG `
      -Location westus2
    
  2. テンプレート スペックのリソース ID を取得します。

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
    
  3. テンプレート スペックをデプロイします。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. ARM テンプレートの場合とまったく同じようにパラメーターを指定します。 ストレージ アカウントの種類のパラメーターを指定して、テンプレート スペックを再デプロイします。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageAccountType Standard_GRS
    

アクセス権の付与

組織内の他のユーザーがテンプレート スペックをデプロイできるようにするには、そのユーザーに読み取りアクセス権を付与する必要があります。 共有するテンプレート スペックを含むリソース グループの Microsoft Entra グループに閲覧者ロールを割り当てることができます。 詳細については、チュートリアル: Azure PowerShell を使用して Azure リソースへのアクセス権をグループに付与する」を参照してください。

テンプレートの更新

テンプレート スペックで、テンプレートに対して行う必要がある変更点が特定されたとします。次のテンプレートは、ストレージ アカウント名のプレフィックスが追加されている点を除いて、以前のテンプレートと同じです。 次のテンプレートをコピーし、azuredeploy.json ファイルを更新します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "namePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "store",
      "metadata": {
        "description": "Prefix for storage account name"
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('namePrefix'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

テンプレート スペックのバージョンの更新

変更したテンプレートに対して新しいテンプレート スペックを作成するのではなく、2.0 という名前の新しいバージョンを既存のテンプレート スペックに追加します。ユーザーはいずれかのバージョンを選択してデプロイできます。

  1. テンプレート スペックの新しいバージョンを作成します。

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "2.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    
  2. 新しいバージョンをデプロイするには、2.0 バージョンのリソース ID を取得します。

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. そのバージョンをデプロイします。 ストレージ アカウント名のプレフィックスを指定します。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -namePrefix "demoaccount"
    

リソースをクリーンアップする

このクイックスタートでデプロイしたリソースをクリーンアップするには、作成したリソース グループを両方とも削除します。

  1. Azure portal で、左側のメニューから [リソース グループ] を選択します。

  2. [名前でフィルター] フィールドに、リソース グループ名 (templateSpecRG and storageRG) を入力します。

  3. リソース グループ名を選択します。

  4. トップ メニューから [リソース グループの削除] を選択します。

次のステップ

リンクされたテンプレートを含むテンプレート スペックを作成する方法については、「リンクされたテンプレートのテンプレート スペックを作成する」を参照してください。