クイックスタート: テンプレート スペックの作成とデプロイ
[アーティクル] 03/20/2024
5 人の共同作成者
フィードバック
この記事の内容
このクイックスタートでは、Azure Resource Manager テンプレート (ARM テンプレート) をテンプレート スペック にパッケージ化する方法について説明します。次に、そのテンプレート スペックをデプロイします。テンプレート スペックには、ストレージ アカウントをデプロイする ARM テンプレートが含まれています。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます 。
テンプレートの作成
テンプレート スペックは、ローカル テンプレートから作成します。 次のテンプレートをコピーし、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 テンプレートを使用できます。
テンプレート スペックを含む新しいリソース グループを作成します。
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
そのリソース グループ内にテンプレート スペックを作成します。 新しいテンプレート スペックに storageSpec という名前を付けます。
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "c:\Templates\azuredeploy.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\azuredeploy.json"
Azure portal にサインインします。
「テンプレート スペック 」を検索します。 使用可能なオプションから [テンプレート スペック] を選択します。
[テンプレートのインポート] を選択します。
フォルダー アイコンを選択します。
保存済みのローカル テンプレートに移動し、それを選択します。 [Open] を選択します。
インポート を選択します。
次の値を指定します。
[名前] : テンプレート スペックの名前を入力します。例: storageSpec
[サブスクリプション] : テンプレート スペックの作成に使用する Azure サブスクリプションを選択します。
[リソース グループ] : [新規作成] を選択し、新しいリソース グループの名前を入力します。 たとえば、templateSpecRG 。
場所 : リソース グループの場所を選択します。 たとえば、米国西部 2 にします。
[バージョン] : テンプレート スペックのバージョンを入力します。1.0 を使用します。
[確認および作成] を選択します。
[作成] を選択します
Note
ARM テンプレートを使用するのではなく、PowerShell または CLI を使用してテンプレート スペックを作成することをお勧めします。これらのツールは、リンクされたテンプレートを、メイン テンプレートに接続された成果物に自動的に変換します。 ARM テンプレートを使用してテンプレート スペックを作成する場合は、これらのリンクされたテンプレートを成果物として手動で追加する必要があり、この作業は複雑になる可能性があります。
ARM テンプレートを使用してテンプレート スペックを作成する場合は、テンプレートはリソース定義に埋め込まれます。 ローカル テンプレートにはいくつかの変更を加える必要があります。 次のテンプレートをコピーし、azuredeploy.json としてローカルに保存します。
Note
埋め込みテンプレートの場合、すべてのテンプレート式 を 2 番目の左角かっこでエスケープする必要があります。 "[
ではなく "[[
を使用します。 JSON 配列の場合は、やはり 1 つの左かっこを使用します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2021-05-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
},
"tags": {},
"resources": [
{
"type": "versions",
"apiVersion": "2021-05-01",
"name": "1.0",
"location": "westus2",
"dependsOn": [ "storageSpec" ],
"properties": {
"mainTemplate": {
"$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."
}
}
},
"variables": {
"storageAccountName": "[[concat('store', uniquestring(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[[variables('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "[[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[[variables('storageAccountName')]"
}
}
}
},
"tags": {}
}
]
}
],
"outputs": {}
}
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\azuredeploy.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "c:\Templates\azuredeploy.json"
テンプレート スペックのデプロイ
テンプレート スペックをデプロイするには、テンプレートのデプロイに使用するのと同じデプロイ コマンドを使用します。 デプロイするテンプレート スペックのリソース 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 」と入力します。
[Storage Account Type](ストレージ アカウントの種類) : [Standard_GRS] を選択します。
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
次のテンプレートをコピーし、storage.json というファイル名でローカルに保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '1.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
],
"outputs": {}
}
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\storage.json"
az deployment group create \
--resource-group storageRG \
--template-file "c:\Templates\storage.json"
アクセス権の付与
組織内の他のユーザーがテンプレート スペックをデプロイできるようにするには、そのユーザーに読み取りアクセス権を付与する必要があります。 共有するテンプレート スペックを含むリソース グループの 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
という名前の新しいバージョンを既存のテンプレート スペックに追加します。ユーザーはいずれかのバージョンを選択してデプロイできます。
テンプレート スペックの新しいバージョンを作成します。
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "c:\Templates\azuredeploy.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\azuredeploy.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'
テンプレート スペックで、 [新しいバージョンの作成] を選択します。
新しいバージョン 2.0
に名前を付け、必要に応じてメモを追加します。 [テンプレートの編集] を選択します。
テンプレートの内容を、更新したテンプレートで置き換えます。 [確認と保存] を選択します。
[変更の保存] を選択します。
新しいバージョンをデプロイするには、 [バージョン] を選択します
デプロイするバージョンの横にある 3 つのドットを選択し、 [デプロイ] を選択します。
以前のバージョンをデプロイしたときと同じように、フィールドに入力します。
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
ここでも、テンプレート スペックと連携させるために、ローカル テンプレートにいくつかの変更を加える必要があります。 次のテンプレートをコピーし、azuredeploy.json としてローカルに保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2021-05-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
},
"tags": {},
"resources": [
{
"type": "versions",
"apiVersion": "2021-05-01",
"name": "2.0",
"location": "westus2",
"dependsOn": [ "storageSpec" ],
"properties": {
"mainTemplate": {
"$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')]"
}
}
}
},
"tags": {}
}
]
}
],
"outputs": {}
}
テンプレート スペックに新しいバージョンを追加するには、Azure CLI または PowerShell を使用してテンプレートをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "c:\Templates\azuredeploy.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "c:\Templates\azuredeploy.json"
次のテンプレートをコピーし、storage.json というファイル名でローカルに保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '2.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
],
"outputs": {}
}
Azure CLI または PowerShell を使用してテンプレートをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "c:\Templates\storage.json"
az deployment group create \
--resource-group storageRG \
--template-file "c:\Templates\storage.json"
リソースをクリーンアップする
このクイックスタートでデプロイしたリソースをクリーンアップするには、作成したリソース グループを両方とも削除します。
Azure portal で、左側のメニューから [リソース グループ] を選択します。
[名前でフィルター] フィールドに、リソース グループ名 (templateSpecRG and storageRG) を入力します。
リソース グループ名を選択します。
トップ メニューから [リソース グループの削除] を選択します。
次のステップ
リンクされたテンプレートを含むテンプレート スペックを作成する方法については、「リンクされたテンプレートのテンプレート スペックを作成する 」を参照してください。