Azure Resource Manager 템플릿 구조 살펴보기

완료됨

이 단원에서는 ARM 템플릿(Azure Resource Manager 템플릿)을 사용하여 코드 제공 인프라를 구현하는 방법을 알아봅니다. ARM 템플릿의 섹션을 조사하고, ARM 템플릿을 Azure에 배포하는 방법을 알아보고, ARM 템플릿의 resources 섹션을 자세히 설명합니다.

IaC(Infrastructure as Code)란?

IaC(Infrastructure as Code)를 사용하면 코드를 통해 애플리케이션에 필요한 인프라를 설명할 수 있습니다.

IaC(Infrastructure as Code)를 사용하면 애플리케이션 코드뿐 아니라 애플리케이션을 배포하는 데 필요한 모든 항목을 중앙 코드 리포지토리에서 유지 관리할 수 있습니다. IaC(Infrastructure as Code)의 이점은 다음과 같습니다.

  • 일관된 구성
  • 향상된 확장성
  • 더 빠른 배포
  • 향상된 추적 가능성

이 비디오는 코드 제공 인프라를 설명합니다.

ARM 템플릿이란?

ARM 템플릿은 배포를 위한 인프라 및 구성을 정의하는 JSON (JavaScript Object Notation) 파일입니다. 템플릿은 ‘선언적 구문’을 사용합니다. 선언적 구문은 해당 제어 흐름을 설명하지 않고도 표시되는 리소스를 간략하게 설명하는 구조체와 요소를 빌드하는 방법입니다. 선언적 구문은 컴퓨터에서 수행할 명령을 사용하는 ‘명령적 구문’과 다릅니다. 명령적 스크립팅은 리소스 배포의 각 단계를 지정하는 데 중점을 둡니다.

ARM 템플릿을 사용하면 배포할 항목을 만드는 프로그래밍 명령 시퀀스를 작성하지 않고도 해당 항목을 선언할 수 있습니다. ARM 템플릿에서 리소스 및 해당 리소스의 속성을 지정하면 Azure Resource Manager가 해당 정보를 사용하여 조직적이고 일관된 방식으로 리소스를 배포합니다.

ARM 템플릿 사용의 이점

ARM 템플릿을 사용하면 배포를 자동화하고 IaC(Infrastructure as Code) 사례를 사용할 수 있습니다. 템플릿 코드는 인프라 및 개발 프로젝트의 일부가 됩니다. 애플리케이션 코드처럼 소스 리포지토리에 IaC 파일을 저장하고 버전을 지정할 수 있습니다.

ARM 템플릿은 idempotent입니다. 즉, 동일한 템플릿을 여러 번 배포하고 동일한 상태의 동일한 리소스 종류를 가져올 수 있습니다.

Resource Manager는 리소스가 올바른 순서로 만들어지도록 리소스 배포를 오케스트레이션합니다. 가능한 경우 ARM 템플릿 배포가 스크립팅된 배포보다 더 빠르게 완료되도록 리소스를 병렬로 만듭니다.

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process scripts.

Resource Manager에는 기본 제공 유효성 검사도 있습니다. 배포가 성공할지 확인하기 위해 배포를 시작하기 전에 템플릿을 확인합니다.

배포가 더 복잡해지면 ARM 템플릿을 더 작고 재사용 가능한 구성 요소로 분할하고 배포 시 함께 연결할 수 있습니다. 템플릿을 다른 템플릿 내에 중첩할 수도 있습니다.

Azure Portal에서 배포 기록을 검토하고 배포 상태 정보를 가져올 수 있습니다. 포털에 모든 매개 변수 및 출력의 값이 표시됩니다.

ARM 템플릿을 Azure Pipelines와 같은 CI/CD(연속 통합 및 지속적인 배포) 도구에 통합할 수도 있습니다. 이 도구는 빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위해 릴리스 파이프라인을 자동화할 수 있습니다. Azure DevOps 및 ARM 템플릿 작업을 사용하여 프로젝트를 지속적으로 빌드 및 배포할 수 있습니다.

ARM 템플릿 파일 구조

ARM 템플릿을 작성하는 경우 템플릿을 구성하는 모든 파트와 해당 파트가 수행하는 작업을 이해해야 합니다. ARM 템플릿 파일은 다음 요소로 구성됩니다.

요소 Description
schema JSON 데이터의 구조를 설명하는 JSON 스키마 파일의 위치를 정의하는 필수 섹션입니다. 사용할 버전 번호는 배포 범위 및 JSON 편집기에 따라 다릅니다.
contentVersion 템플릿 버전을 정의하는 필수 섹션입니다(예: 1.0.0.0). 이 값을 사용하여 템플릿의 중요한 변경 내용을 문서화하고 올바른 템플릿을 배포하는지 확인할 수 있습니다.
apiProfile 리소스 종류의 API 버전 컬렉션을 정의하는 선택적 섹션입니다. 이 값을 사용하면 템플릿에 있는 각 리소스의 API 버전을 지정하지 않을 수 있습니다.
parameters 배포 중에 제공되는 값을 정의하는 선택적 섹션입니다. 해당 값은 매개 변수 파일, 명령줄 매개 변수 또는 Azure Portal에서 제공됩니다.
variables 템플릿 언어 식을 간소화하는 데 사용되는 값을 정의할 선택적 섹션입니다.
functions 템플릿 내에서 사용할 수 있는 사용자 정의 함수를 정의할 수 있는 선택적 섹션입니다. 템플릿에서 반복적으로 사용되는 복잡한 식이 있는 경우 사용자 정의 함수를 사용하여 템플릿을 간소화할 수 있습니다.
resources 리소스 그룹 또는 구독에서 업데이트하거나 배포하려는 실제 항목을 정의하는 필수 섹션입니다.
output 배포 종료 시 반환되는 값을 지정할 선택적 섹션입니다.

Azure에 ARM 템플릿 배포

ARM 템플릿을 Azure에 배포하는 방법에는 세 가지가 있습니다.

  • 로컬 템플릿 배포
  • 연결된 템플릿 배포
  • 지속적인 배포 파이프라인에서 배포

이 모듈에서는 로컬 ARM 템플릿 배포를 중점적으로 살펴봅니다. 이후의 Learn 모듈에서는 더 복잡한 인프라를 배포하는 방법 및 Azure Pipelines와 통합하는 방법을 알아봅니다.

로컬 템플릿을 배포하려면 Azure PowerShell 또는 Azure CLI가 로컬로 설치되어야 합니다.

먼저 Azure CLI 또는 Azure PowerShell을 사용하여 Azure에 로그인합니다.

az login

다음으로, 리소스 그룹을 정의합니다. 이미 정의된 리소스 그룹을 사용해도 되고 다음 명령으로 새 리소스 그룹을 만들어도 됩니다. 사용 가능한 위치 값은 az account list-locations(CLI) 또는 Get-AzLocation(PowerShell)을 통해 가져올 수 있습니다. az configure --defaults location=<location>을 사용하여 기본 위치를 구성할 수 있습니다.

az group create \
  --name {name of your resource group} \
  --location "{location}"

리소스 그룹에 템플릿을 배포하려면 Azure CLI 명령 az deployment group create 또는 Azure PowerShell 명령 New-AzResourceGroupDeployment를 사용합니다.

az deployment group create과(와) az group deployment create의 차이점은 az group deployment create이(가) 더 이상 사용되지 않는 오래된 명령이며 az deployment group create(으)로 대체된다는 점입니다. 따라서 az deployment group create을(를) 사용하여 리소스 그룹 범위 아래에 리소스를 배포하는 것이 좋습니다.

두 명령 모두 배포 기록에서 쉽게 식별할 수 있도록 리소스 그룹, 지역과 배포 이름이 필요합니다. 편의를 위해 이 연습에서는 템플릿 파일의 경로를 저장하는 변수를 만듭니다. 해당 변수를 사용하면 배포할 때마다 경로를 다시 입력할 필요가 없기 때문에 배포 명령을 더 쉽게 실행할 수 있습니다. 예를 들면 다음과 같습니다.

이 배포 명령을 실행하려면 Azure CLI의 최신 버전이 있어야 합니다.

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

연결된 템플릿은 복잡한 솔루션을 배포하는 데 사용됩니다. 템플릿을 여러 템플릿으로 분할하고 주 템플릿을 통해 관련 템플릿을 배포할 수 있습니다. 주 템플릿이 배포되면 연결된 템플릿의 배포를 트리거합니다. SAS 토큰을 사용하여 연결된 템플릿을 저장하고 보호할 수 있습니다.

CI/CD 파이프라인은 ARM 템플릿 프로젝트를 포함하는 개발 프로젝트의 생성 및 배포를 자동화합니다. 템플릿 배포에 사용되는 가장 일반적인 두 파이프라인은 Azure PipelinesGitHub Actions입니다.

두 가지 배포 유형에 관한 자세한 내용은 다른 모듈에서 다룹니다.

템플릿에 리소스 추가

템플릿에 리소스를 추가하려면 리소스 공급자 및 해당 리소스 종류를 알아야 합니다. 이 조합의 구문은 {resource-provider}/{resource-type} 형식입니다. 예를 들어 템플릿에 스토리지 계정 리소스를 추가하려면 Microsoft.Storage 리소스 공급자가 필요합니다. 이 공급자 형식 중 하나는 storageAccount입니다. 따라서 리소스 종류는 Microsoft.Storage/storageAccounts로 표시됩니다. Azure 서비스의 리소스 공급자 목록을 사용하여 필요한 공급자를 찾을 수 있습니다.

공급자 형식 및 리소스 종류를 정의한 후 사용하려는 각 리소스 종류의 속성을 이해해야 합니다. 자세한 내용은 Azure Resource Manager 템플릿에서 리소스 정의를 참조하세요. 왼쪽 열에서 목록을 확인하여 리소스를 찾습니다. 속성은 API 버전별로 정렬됩니다.

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

스토리지 계정 페이지에서 나열된 일부 속성의 예는 다음과 같습니다.

Screenshot of a Microsoft documentation page showing some of the storage account properties.

스토리지 예제에서 템플릿은 다음과 같이 표시될 수 있습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}