Azure Resource Manager 및 Azure ARM 템플릿 설명

완료됨

ARM(Azure Resource Manager)은 Azure용 배포 및 관리 서비스입니다. Azure 계정에서 리소스를 만들고, 업데이트하고, 삭제할 수 있는 관리 계층을 제공합니다. Azure 리소스를 사용하여 무엇인가 할 때마다 ARM이 관련됩니다.

사용자가 Azure 도구, API 또는 SDK에서 요청을 보내면 ARM이 요청을 받습니다. ARM은 요청을 인증하고 권한을 부여합니다. 이후, ARM은 요청된 작업을 수행하는 Azure 서비스에 요청을 보냅니다. 모든 요청이 동일한 API를 통해 처리되므로 모든 여러 도구에서 일관적인 결과 및 기능을 볼 수 있습니다.

Azure Resource Manager의 장점

Azure Resource Manager를 사용하여 다음을 수행할 수 있습니다.

  • 스크립트가 아니라 선언적 템플릿을 통해 인프라를 관리합니다. Resource Manager 템플릿은 Azure에 무엇을 배포하는지 정의하는 JSON 파일입니다.
  • 이 리소스를 개별적으로 처리하는 대신, 솔루션의 모든 리소스를 그룹으로 배포, 관리 및 모니터링합니다.
  • 개발 수명 주기 내내 솔루션을 다시 배포합니다(리소스가 일관된 상태로 배포됨을 확신할 수 있음).
  • 리소스가 올바른 순서로 배포되도록 리소스 간의 종속성을 정의합니다.
  • 모든 서비스에 액세스 제어를 적용합니다. RBAC가 기본적으로 관리 플랫폼에 통합되기 때문입니다.
  • 리소스에 태그를 적용하여 구독의 모든 리소스를 논리적으로 구성합니다.
  • 동일한 태그를 공유하는 리소스 그룹에 대한 비용을 확인하여 조직의 청구를 명확히 합니다.

다음 비디오에서는 Azure Resource Manager에 대한 개요를 제공합니다.

코드 제공 인프라(Infrastructure as code)

코드로서의 인프라는 인프라를 코드 줄로 관리하는 개념입니다. 입문 수준에서는 Azure Cloud Shell, Azure PowerShell 또는 Azure CLI를 사용하여 리소스를 관리하고 구성하는 것과 같습니다. 클라우드에 익숙해지면 인프라를 코드 개념으로 사용하여 반복 가능한 템플릿 및 구성을 사용하여 전체 배포를 관리할 수 있습니다. ARM 템플릿과 Bicep은 Azure Resource Manager와 함께 인프라를 코드로 사용하여 환경을 유지 관리하는 두 가지 예입니다.

ARM 템플릿

ARM 템플릿을 사용하면 선언적 JSON 형식에서 사용하려는 리소스를 설명할 수 있습니다. ARM 템플릿을 사용하면 코드를 실행하기 전에 배포 코드가 확인됩니다. 이렇게 하면 리소스가 올바르게 만들어져 연결됩니다. 그런 다음, 템플릿이 이러한 리소스의 생성을 병렬로 오케스트레이션합니다. 즉, 동일한 리소스의 50개의 인스턴스가 필요한 경우 50개 인스턴스가 모두 동시에 생성됩니다.

따라서 개발자, DevOps 전문가 또는 IT 전문가는 ARM 템플릿에서 각 리소스의 원하는 상태와 구성을 정의하기만 하면 되며 나머지는 템플릿에서 처리합니다. 템플릿은 리소스가 설정되기 전 또는 후에 PowerShell 및 Bash 스크립트를 실행할 수도 있습니다.

ARM 템플릿 사용의 이점

ARM 템플릿은 Azure 리소스 배포를 계획할 때 많은 이점을 제공합니다. 이러한 이점 가운데에는 다음과 같은 것들도 있습니다.

  • 선언적 구문: ARM 템플릿을 사용하면 전체 Azure 인프라를 선언적으로 생성하고 배포할 수 있습니다. 선언적 구문이란 무엇을 배포할 지 선언하면서도 리소스 배포를 위해 실제 프로그래밍 명령어와 시퀀스를 쓸 필요는 없는 경우를 의미합니다.
  • 반복 가능한 결과: 개발 수명 주기 내내 인프라를 반복적으로 배포하며, 안정적이고 일관된 리소스 배포를 보장할 수 있습니다. 모든 환경이 동일하다는 것을 아는 상태로 동일한 ARM 템플릿을 사용하여 여러 개발/테스트 환경을 배포할 수 있습니다.
  • 오케스트레이션: 복잡한 작업 순서 지정 작업에 대해 우려할 필요가 없습니다. ARM이 상호 종속된 리소스 배포를 오케스트레이션하므로 이러한 리소스가 올바른 순서로 작성됩니다. 가능한 경우 ARM은 리소스를 병렬로 배포하여, 직렬로 배포될 때보다 배포가 빠르게 완료되도록 합니다. 다수의 명령어가 아닌 하나의 명령으로 템플릿을 배포합니다.
  • 모듈식 파일: 템플릿을 재사용 가능한 소규모 구성 요소로 분할하고, 배포 시 서로 연결할 수 있습니다. 다른 템플릿 내에 하나의 템플릿을 중첩할 수도 있습니다. 예를 들어 VM 스택에 대한 템플릿을 만든 다음 전체 환경을 배포하는 템플릿 내에 해당 템플릿을 중첩할 수 있으며 해당 VM 스택은 각 환경 템플릿에 일관되게 배포됩니다.
  • 확장성: 배포 스크립트를 사용하여 템플릿에 PowerShell 또는 Bash 스크립트를 추가할 수 있습니다. 배포 스크립트는 배포 중에 리소스를 설정하는 능력을 확장합니다. 스크립트는 템플릿에 포함될 수도 있고, 외부 소스에 저장되어 템플릿이 해당 스크립트를 참조할 수도 있습니다. 배포 스크립트를 사용하면 단일 ARM 템플릿에서 엔드투엔드 환경 설정을 완료할 수 있습니다.

Bicep

Bicep은 선언적 구문을 사용하여 Azure 리소스를 배포하는 언어입니다. Bicep 파일은 인프라 및 구성을 정의합니다. 그런 다음 ARM은 Bicep 파일을 기반으로 해당 환경을 배포합니다. JSON으로 작성된 ARM 템플릿과 유사하지만 Bicep 파일은 더 간단하고 간결한 스타일을 사용하는 경향이 있습니다.

Bicep의 일부 이점은 다음과 같습니다.

  • 모든 리소스 유형 및 API 버전 지원: Bicep은 Azure 서비스에 대한 모든 미리 보기 및 GA 버전을 즉시 지원합니다. 리소스 공급자가 새로운 리소스 유형과 API 버전을 도입하는 즉시 Bicep 파일에서 사용할 수 있습니다. 새 서비스를 사용하기 전에 도구가 업데이트될 때까지 기다릴 필요가 없습니다.
  • 간단한 구문: 해당하는 JSON 템플릿과 비교할 때 Bicep 파일은 더 간결하고 읽기 쉽습니다. Bicep에는 프로그래밍 언어에 대한 이전 지식이 필요하지 않습니다. Bicep 구문은 선언적이며 배포할 리소스 및 리소스 속성을 지정합니다.
  • 반복 가능한 결과: 개발 수명 주기 내내 인프라를 반복적으로 배포하며, 안정적이고 일관된 리소스 배포를 보장할 수 있습니다. Bicep 파일은 idempotent이며, 이는 동일한 파일을 여러 번 배포하고 동일한 상태에 있는 동일한 유형의 리소스를 가져올 수 있음을 의미합니다. 업데이트를 나타내는 여러 개의 개별 파일을 개발하는 대신 원하는 상태를 나타내는 하나의 파일을 개발할 수 있습니다.
  • 오케스트레이션: 복잡한 작업 순서 지정 작업에 대해 우려할 필요가 없습니다. Resource Manager는 리소스가 올바른 순서로 생성되도록 상호 의존적인 리소스의 배포를 오케스트레이션합니다. 가능한 경우 Resource Manager는 리소스를 병렬로 배포하여, 직렬로 배포될 때보다 배포가 빠르게 완료되도록 합니다. 다수의 명령어가 아닌 하나의 명령으로 파일을 배포합니다.
  • 모듈성: 모듈을 사용하여 Bicep 코드를 관리 가능한 부분으로 나눌 수 있습니다. 모듈은 관련 리소스 집합을 배포합니다. 모듈을 사용하면 코드를 재사용하고 개발을 간소화할 수 있습니다. 해당 리소스를 배포해야 할 때마다 모듈을 Bicep 파일에 추가합니다.