빠른 시작: 템플릿 사양 만들기 및 배포
이 문서의 내용
이 빠른 시작에서는 템플릿 사양 에 ARM 템플릿(Azure Resource Manager 템플릿)을 패키지하는 방법을 보여 줍니다. 그런 다음, 해당 템플릿 사양을 배포합니다. 템플릿 사양에는 스토리지 계정을 배포하는 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 에 로그인합니다.
템플릿 사양 을 검색합니다. 사용 가능한 옵션에서 템플릿 사양 을 선택합니다.
템플릿 가져오기 를 선택합니다.
폴더 아이콘을 선택합니다.
저장한 로컬 템플릿으로 이동하여 선택합니다. 열기 를 선택합니다.
가져오기 를 선택합니다.
다음 값을 제공합니다.
이름 : 템플릿 사양의 이름을 입력합니다(예: storageSpec ).
구독 : 템플릿 사양을 만드는 데 사용되는 Azure 구독을 선택합니다.
리소스 그룹 : 새로 만들기 를 선택한 다음, 새 리소스 그룹 이름을 지정합니다. 예: templateSpecRG .
위치 : 리소스 그룹에 대한 위치를 선택합니다. 예를 들어 미국 서부2 로 선택합니다.
버전 : 템플릿 사양의 버전을 입력합니다. 1.0 을 사용합니다.
검토 + 생성 를 선택합니다.
만들기 를 선택합니다.
참고 항목
ARM 템플릿을 사용하는 대신, PowerShell 또는 CLI를 사용하여 템플릿 사양을 만드는 것이 좋습니다. 해당 도구는 연결된 템플릿을 기본 템플릿에 연결된 아티팩트로 자동으로 변환합니다. ARM 템플릿을 사용하여 템플릿 사양을 만드는 경우 연결된 템플릿을 아티팩트로 수동으로 추가해야 합니다. 이 작업은 복잡할 수 있습니다.
ARM 템플릿을 사용하여 템플릿 사양을 만들면 템플릿이 리소스 정의에 포함됩니다. 로컬 템플릿에 수행해야 하는 몇 가지 변경 내용이 있습니다. 다음 템플릿을 복사하고 azuredeploy.json 으로 로컬로 저장합니다.
참고 항목
포함된 템플릿에서 모든 템플릿 식 을 두 번째 왼쪽 대괄호로 이스케이프해야 합니다. "[[
대신 "[
를 사용합니다. 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": "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")
참고 항목
템플릿 사양 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 를 입력합니다.
스토리지 계정 유형 : Standard_GRS 를 선택합니다.
검토 + 만들기 를 선택합니다.
만들기 를 선택합니다.
다음 템플릿을 복사하고 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
의 이름을 지정하고 필요에 따라 메모를 추가합니다. 템플릿 편집 을 선택합니다.
템플릿의 내용을 업데이트된 템플릿으로 바꿉니다. 검토 + 저장 을 선택합니다.
변경 사항 저장 을 선택합니다.
새 버전을 배포하려면 버전 을 선택합니다.
배포할 버전에 대해 점 세 개와 배포 를 선택합니다.
이전 버전을 배포할 때와 같이 필드를 입력합니다.
검토 + 만들기 를 선택합니다.
만들기 를 선택합니다.
다시 말하자면 템플릿 사양에 맞게 작동하도록 로컬 템플릿을 변경해야 합니다. 다음 템플릿을 복사하고 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 및 storageRG)을 입력합니다.
해당 리소스 그룹 이름을 선택합니다.
위쪽 메뉴에서 리소스 그룹 삭제를 선택합니다.
다음 단계
연결된 템플릿을 포함하는 템플릿 사양을 만드는 방법에 대한 자세한 내용은 연결된 템플릿의 템플릿 사양 만들기 를 참조하세요.