이 빠른 시작에서는 템플릿 사양에 ARM 템플릿(Azure Resource Manager 템플릿)을 패키지하는 방법을 보여 줍니다. 그런 다음, 해당 템플릿 사양을 배포합니다. 템플릿 사양에는 스토리지 계정을 배포하는 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-01-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
포함된 템플릿에서 모든 템플릿 식을 두 번째 왼쪽 대괄호로 이스케이프해야 합니다.
"[[ 대신 "[를 사용합니다. 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', '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-01-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
템플릿 사양 ID를 가져와서 Windows PowerShell의 변수에 할당하는 데 알려진 문제가 있습니다.
템플릿 사양을 배포합니다.
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-01-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-01-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 및 storageRG)을 입력합니다.
- 해당 리소스 그룹 이름을 선택합니다.
- 위쪽 메뉴에서 리소스 그룹 삭제를 선택합니다.
다음 단계
연결된 템플릿을 포함하는 템플릿 사양을 만드는 방법에 대한 자세한 내용은 연결된 템플릿의 템플릿 사양을 만드는 방법을 참조하세요.