ARM 템플릿 작성
JSON으로 매개 변수가 지정된 ARM 템플릿을 만들어 스토리지 계정과 VM을 배포하고, 템플릿 함수와 변수를 사용해 템플릿을 재사용 가능하게 만듭니다.
ARM 템플릿 작성은(는) CoddyKit의 무료 Azure Fundamentals 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Azure Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
ARM 템플릿을 사용하는 이유
ARM 템플릿을 사용하면 Azure 인프라를 JSON 형식의 코드로 정의할 수 있습니다. 이를 통해 애플리케이션 코드와 함께 버전을 관리할 수 있는 반복 가능하고 일관된 배포가 가능합니다. 템플릿은 멱등성을 가지므로 동일한 템플릿을 여러 번 실행해도 같은 결과가 생성되며, 변경 후 안전하게 다시 적용할 수 있습니다.
템플릿 뼈대와 스키마
모든 ARM 템플릿은 템플릿 스키마 URL을 가리키는 $schema 속성으로 시작하고, 이어서 contentVersion 문자열이 나옵니다. 스키마는 Azure 포털과 편집기 확장이 템플릿의 유효성을 검사하고 IntelliSense를 제공하는 방법을 지정합니다. 그 뒤에 나오는 다섯 가지 주요 섹션은 parameters, variables, functions, resources, outputs입니다.
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#',
'contentVersion': '1.0.0.0',
'parameters': {},
'variables': {},
'functions': [],
'resources': [],
'outputs': {}
}매개 변수 정의
Parameters는 배포 시 입력값을 받아 템플릿을 재사용할 수 있게 합니다. 각 매개 변수에는 type(string, int, bool, object, array, secureString), 선택적 defaultValue, 유효성 검사를 위한 선택적 allowedValues가 있습니다. 암호에 secureString을 사용하면 해당 값이 배포 기록에 절대 기록되지 않습니다.
"parameters": {
"storageAccountName": {
"type": "string",
"minLength": 3,
"maxLength": 24,
"metadata": { "description": "Globally unique storage account name" }
},
"sku": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": ["Standard_LRS", "Standard_GRS", "Premium_LRS"]
}
}계산된 값에 Variables 사용
Variables는 매개 변수 또는 템플릿 함수에서 계산된 값을 저장하여 반복을 줄이고 템플릿을 더 쉽게 유지 관리할 수 있게 합니다. Variables는 한 번 평가되며 [variables('name')] 표현식을 사용해 resources 섹션 전체에서 참조됩니다. 일반적인 패턴은 매개 변수와 고유 접미사를 연결하여 리소스 이름을 만드는 것입니다.
"variables": {
"uniqueStorageName": "[concat(parameters('storageAccountName'), uniqueString(resourceGroup().id))]",
"location": "[resourceGroup().location]"
}리소스 정의
resources 배열은 ARM 템플릿의 핵심입니다. 각 요소는 필수 필드인 type, apiVersion, name, location과 함께 하나의 Azure 리소스를 설명합니다. apiVersion은 리소스 공급자 스키마 버전을 고정합니다. 최신 기능을 사용하고 더 이상 사용되지 않는 속성을 피하려면 항상 최신 안정 버전을 사용해야 합니다.
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[variables('uniqueStorageName')]",
"location": "[variables('location')]",
"sku": { "name": "[parameters('sku')]" },
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true,
"minimumTlsVersion": "TLS1_2"
}
}
]템플릿 함수와 표현식
ARM 템플릿 표현식은 대괄호 [...]로 묶이며 문자열, 배열, 개체 및 리소스 ID를 위한 기본 제공 함수를 지원합니다. 일반적으로 사용하는 함수에는 concat(), resourceGroup(), resourceId(), uniqueString(), parameters()가 있습니다. 이러한 함수는 로컬이 아니라 배포 시 ARM에 의해 서버 측에서 평가됩니다.
// Reference a resource ID inside a template
"subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'myVNet', 'mySubnet')]"
// Build a unique, deterministic name
"name": "[concat('storage', uniqueString(resourceGroup().id))]"
// Conditionally include a resource
"condition": "[equals(parameters('deployStorage'), true)]"Outputs: 값 반환
outputs 섹션은 배포가 성공한 후 ARM이 반환하는 값을 정의합니다. Outputs는 템플릿을 연결할 때 필수적입니다. 네트워크 템플릿을 배포하고 서브넷 리소스 ID를 출력한 다음, 이를 VM 템플릿의 매개 변수로 전달할 수 있습니다. Outputs는 배포의 리소스 속성을 포함하여 모든 표현식을 참조할 수 있습니다.
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('uniqueStorageName')]"
},
"blobEndpoint": {
"type": "string",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints.blob]"
}
}연결된 템플릿과 중첩 템플릿
복잡한 아키텍처를 위해 ARM은 연결된 템플릿(외부 템플릿 URL 참조)과 중첩 템플릿(Microsoft.Resources/deployments 유형을 사용해 resources 배열 안에 템플릿 포함)을 지원합니다. 이를 통해 대규모 인프라 배포를 모듈화되고 재사용 가능한 여러 부분으로 나누면서도 단일 오케스트레이션 템플릿을 진입점으로 유지할 수 있습니다.
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "networkDeploy",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "https://raw.githubusercontent.com/contoso/templates/main/network.json",
"contentVersion": "1.0.0.0"
},
"parameters": {
"vnetName": { "value": "[parameters('vnetName')]" }
}
}
}매개 변수 파일
명령줄에서 매개 변수를 전달하는 대신 별도의 매개 변수 파일에 저장할 수 있습니다. 매개 변수 파일은 이름-값 쌍을 포함하는 parameters 개체가 있는 JSON 파일입니다. 매개 변수 파일은 환경별로 만들 수 있으며(예: dev.parameters.json, prod.parameters.json) 소스 제어에 커밋할 수 있습니다. 민감한 값은 일반 텍스트 대신 Azure Key Vault 참조로 관리할 수 있습니다.
// dev.parameters.json
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#',
'contentVersion': '1.0.0.0',
'parameters': {
'storageAccountName': { 'value': 'devstorageacct' },
'sku': { 'value': 'Standard_LRS' }
}
}
// Deploy with parameters file
// az deployment group create -g MyRG -f azuredeploy.json -p dev.parameters.json템플릿 배포 및 유효성 검사
Azure CLI 명령 az deployment group create를 사용하여 리소스 그룹에 템플릿을 배포합니다. 운영 환경에 배포하기 전에 az deployment group validate를 실행하여 스키마 및 논리 오류를 찾고, az deployment group what-if를 실행하여 리소스 변경 사항을 미리 확인합니다. 이 세 명령은 안전한 배포 파이프라인을 구성합니다. 유효성 검사, 미리 보기, 배포의 순서입니다.
# Step 1: Validate the template syntax
az deployment group validate \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 2: Preview changes
az deployment group what-if \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 3: Deploy
az deployment group create \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.jsonARM 템플릿 모범 사례
다음 ARM 템플릿 모범 사례를 따르세요. 환경별 값에는 매개 변수를 사용하고, 반복을 피하려면 변수를 사용하며, API 버전은 안정 버전으로 고정하고, 암호에는 secureString을 사용하고, 매개 변수에 메타데이터 설명을 추가하고, 큰 템플릿은 연결된 모듈로 분리하세요. 감사 가능성을 높이려면 템플릿을 Git 리포지토리에 저장하고 CI/CD 파이프라인을 통해 배포하세요.
빠른 확인
이 단원에서 다룬 Microsoft Azure Fundamentals (AZ-900) 개념에 대한 이해도를 확인해 보세요.
단원 복습
이 단원에서는 다음을 배웠습니다. ARM 템플릿은 Azure 인프라를 선언적으로 정의하는 JSON 문서이며, parameters와 variables를 사용하면 템플릿을 재사용하고 유지 관리할 수 있습니다. 또한 validate, what-if, deploy 작업 흐름을 통해 안전하고 반복 가능한 배포를 수행할 수 있습니다. 다음으로 ARM JSON을 현대적으로 추상화한 Bicep을 살펴보겠습니다.
자주 묻는 질문
“ARM 템플릿 작성” 강의는 무료인가요?
네 — “ARM 템플릿 작성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Azure Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
“ARM 템플릿 작성”에서 뭘 배우나요?
JSON으로 매개 변수가 지정된 ARM 템플릿을 만들어 스토리지 계정과 VM을 배포하고, 템플릿 함수와 변수를 사용해 템플릿을 재사용 가능하게 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Azure Fundamentals을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Azure Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“ARM 템플릿 작성” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Azure Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Azure Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.