このクイックスタートでは、Azure Resource Manager テンプレート (ARM テンプレート) をテンプレート スペックにパッケージ化する方法について説明します。次に、そのテンプレート スペックをデプロイします。テンプレート スペックには、ストレージ アカウントをデプロイする ARM テンプレートが含まれています。
Prerequisites
アクティブなサブスクリプションが含まれる Azure アカウント。
無料でアカウントを作成できます。
テンプレートを作成する
ARM テンプレートからテンプレート スペックを作成します。 次のテンプレートをコピーし、C:\Templates\createStorageV1.jsとして保存 します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
テンプレート スペックを作成する
テンプレート スペックは、Microsoft.Resources/templateSpecs という名前のリソースの種類です。 テンプレート スペックを作成するには、PowerShell、Azure CLI、Azure portal、または ARM テンプレートを使用します。
テンプレート スペックを含む新しいリソース グループを作成します。
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
そのリソース グループ内にテンプレート スペックを作成します。 新しいテンプレート スペックに storageSpec という名前を付けます。
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\Templates\createStorageV1.json"
テンプレート スペックを含む新しいリソース グループを作成します。
az group create \
--name templateSpecRG \
--location westus2
そのリソース グループ内にテンプレート スペックを作成します。 新しいテンプレート スペックに storageSpec という名前を付けます。
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "C:\Templates\createStorageV1.json"
Azure portal にサインインします。
「テンプレート スペック」を検索します。 使用可能なオプションから [テンプレート スペック] を選択します。
[ テンプレートのインポート] を選択し、指示に従って、前に保存した C:\Templates\createStorageV1.jsを インポートします。
次の値を指定します。
-
[名前]: テンプレート スペックの名前を入力します。たとえば、storageSpec。
-
[サブスクリプション] : テンプレート スペックの作成に使用する Azure サブスクリプションを選択します。
-
[リソース グループ] : [新規作成] を選択し、新しいリソース グループの名前を入力します。 たとえば、templateSpecRG。
-
場所: リソース グループの場所を選択します。 たとえば、米国西部 2 にします。
-
[バージョン] : テンプレート スペックのバージョンを入力します。1.0 を使用します。
[ 確認と作成] を選択し、[ 作成] を選択します。
Note
テンプレート スペックを作成するには、ARM テンプレートの代わりに PowerShell または CLI を使用することをお勧めします。これらのツールは、リンクされたテンプレートをメイン テンプレートに関連付けられている成果物に自動的に変換します。 ARM テンプレートを使用する場合は、リンクされたテンプレートをアーティファクトとして手動で追加する必要があります。これはより複雑になる可能性があります。
ARM テンプレートを使用してテンプレート スペックを作成する場合は、テンプレートはリソース定義に埋め込まれます。 次のテンプレートをコピーし、 createTemplateSpec.jsonとしてローカルに保存します。
Note
埋め込みテンプレートの場合、すべてのテンプレート式を 2 番目の左角かっこでエスケープする必要があります。
"[[ ではなく "[ を使用します。 JSON 配列の場合は、やはり 1 つの左かっこを使用します。 次の例の 名前 と 場所 のプロパティを参照してください。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2022-02-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
}
},
{
"type": "Microsoft.Resources/templateSpecs/versions",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', 'storageSpec', '1.0')]",
"location": "westus2",
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[[parameters('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
},
"dependsOn": [
"storageSpec"
]
}
]
}
Azure CLI または PowerShell を使用して、新しいリソース グループを作成します。
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
Azure CLI または PowerShell を使用してテンプレートをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\Templates\createTemplateSpec.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\Templates\createTemplateSepc.json"
Azure CLI または PowerShell を使用してデプロイを確認します。
Get-AzTemplateSpec `
-ResourceGroupName templateSpecRG `
-Name storageSpec
az ts show \
--resource-group templateSpecRG \
--name storageSpec
テンプレート スペックのデプロイ
テンプレート スペックをデプロイするには、テンプレートのデプロイに使用するのと同じデプロイ コマンドを使用します。 デプロイするテンプレート スペックのリソース ID を渡します。
新しいストレージ アカウントを格納するリソース グループを作成します。
New-AzResourceGroup `
-Name storageRG `
-Location westus2
テンプレート スペックのリソース ID を取得します。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
テンプレート スペックをデプロイします。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
ARM テンプレートの場合とまったく同じようにパラメーターを指定します。 ストレージ アカウントの種類のパラメーターを指定して、テンプレート スペックを再デプロイします。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
新しいストレージ アカウントを格納するリソース グループを作成します。
az group create \
--name storageRG \
--location westus2
テンプレート スペックのリソース ID を取得します。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Note
Windows PowerShell におけるテンプレート スペック ID の取得と変数への割り当てには既知の問題があります。
テンプレート スペックをデプロイします。
az deployment group create \
--resource-group storageRG \
--template-spec $id
ARM テンプレートの場合とまったく同じようにパラメーターを指定します。 ストレージ アカウントの種類のパラメーターを指定して、テンプレート スペックを再デプロイします。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType='Standard_GRS'
作成したテンプレート スペックを選択します。 検索ボックスを使用して、テンプレート スペックが多数ある場合は検索します。
[デプロイ] を選択します。
次の値を指定します。
-
[サブスクリプション] : リソースを作成するための Azure サブスクリプションを選択します。
-
[リソース グループ] : [新規作成] を選択し、「storageRG」と入力します。
[確認と作成] を選択し、次に [作成] を選択します。
次のテンプレートをコピーし、 deployTemplateSpecV1.jsonとしてローカルに保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '1.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
]
}
テンプレートでは、 templateSpecRG はテンプレート スペックを含むリソース グループの名前、 storageSpec はテンプレート スペックの名前、 1.0 はテンプレート スペックのバージョンです。
Azure CLI または PowerShell を使用して、ストレージ アカウント用の新しいリソース グループを作成します。
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Azure CLI または PowerShell を使用してテンプレートをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\Templates\deployTemplateSpecV1.json"
az deployment group create \
--resource-group storageRG \
--template-file "C:\Templates\deployTemplateSpecV1.json"
Azure CLI または PowerShell を使用してデプロイを確認します。
Get-AzResource `
-ResourceGroupName storageRG
az resource list \
--resource-group storageRG
アクセス権を付与する
組織内の他のユーザーがテンプレート スペックをデプロイできるようにするには、そのユーザーに読み取りアクセス権を付与します。 共有するテンプレート スペックを含むリソース グループの Microsoft Entra グループに閲覧者ロールを割り当てます。 詳細については、チュートリアル: Azure PowerShell を使用して Azure リソースへのアクセス権をグループに付与する」を参照してください。
テンプレートの更新
テンプレート スペックでテンプレートを変更するには、テンプレートを修正します。 次のテンプレートは、ストレージ アカウント名のプレフィックスを追加する点を除き、以前のテンプレートと似ています。 次のテンプレートをコピーし 、createStorageV2.jsonファイル として保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
テンプレート スペックのバージョンの更新
変更後のテンプレートの新しいテンプレート スペックを作成する代わりに、既存のテンプレート スペックに 2.0 という名前の新しいバージョンを追加します。どちらのバージョンでもデプロイできます。
テンプレート スペックの新しいバージョンを作成します。
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\Templates\createStorageV2.json"
新しいバージョンをデプロイするには、2.0 バージョンのリソース ID を取得します。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
そのバージョンをデプロイします。 ストレージ アカウント名のプレフィックスを指定します。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-namePrefix "demoaccount"
テンプレート スペックの新しいバージョンを作成します。
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "C:\Templates\createStorageV2.json"
新しいバージョンをデプロイするには、2.0 バージョンのリソース ID を取得します。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
そのバージョンをデプロイします。 ストレージ アカウント名のプレフィックスを指定します。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters namePrefix='demoaccount'
テンプレート スペック storageSpec を開き、[ 新しいバージョンの作成] を選択します。
基本テンプレートとして 1.0 を選択し、[ 作成] を選択します。
新しいバージョン 2.0 に名前を付け、必要に応じてメモを追加します。
[テンプレートの編集] を選択します。
テンプレートの内容を更新されたテンプレートに置き換えます。
[確認と保存] を選択します。
[変更の保存] を選択します。
新しいバージョンをデプロイするには、[バージョン] を選択します。
新しいバージョンを開き、[ デプロイ] を選択します。
以前のバージョンをデプロイする場合と同様に、フィールドに入力します。
[確認と作成] を選択し、次に [作成] を選択します。
ここでも、テンプレート スペックと連携させるために、ローカル テンプレートにいくつかの変更を加える必要があります。 次のテンプレートをコピーし、 createTemplateSpec.jsonとしてローカルに保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2022-02-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
}
},
{
"type": "Microsoft.Resources/templateSpecs/versions",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', 'storageSpec', '2.0')]",
"location": "westus2",
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[[parameters('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
},
"dependsOn": [
"storageSpec"
]
}
]
}
テンプレート スペックに新しいバージョンを追加するには、Azure CLI または PowerShell を使用してテンプレートをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\Templates\createTemplateSpec.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\Templates\createTemplateSpec.json"
Azure CLI または PowerShell を使用してデプロイを確認します。
Get-AzTemplateSpec `
-ResourceGroupName templateSpecRG `
-Name storageSpec
az ts show \
--resource-group templateSpecRG \
--name storageSpec
新しいバージョンの 2.0 がバージョンの一覧に表示されます。
次のテンプレートをコピーし、 deployTemplateSpecV2.jsonとしてローカルに保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '2.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
]
}
Azure CLI または PowerShell を使用してテンプレートをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\Templates\deployTemplateSpecV2.json"
az deployment group create \
--resource-group storageRG \
--template-file "C:\Templates\deployTemplateSpecV2.json"
Azure CLI または PowerShell を使用してデプロイを確認します。
Get-AzResource `
-ResourceGroupName storageRG
az resource list \
--resource-group storageRG
新しいストレージ アカウントには、 store で始まる名前と、リソース グループ ID に基づく一意の文字列が表示されます。
リソースをクリーンアップする
このクイックスタートでデプロイしたリソースをクリーンアップするには、作成したリソース グループを両方とも削除します。
- Azure portal で、左側のメニューから [リソース グループ] を選択します。
- [名前でフィルター] フィールドに、リソース グループ名 (templateSpecRG and storageRG) を入力します。
- リソース グループ名を選択します。
- トップ メニューから [リソース グループの削除] を選択します。
次のステップ
リンクされたテンプレートを含むテンプレート スペックを作成する方法については、リンクされたテンプレート のテンプレート スペックを作成する方法を参照してください。