Azure Resource Manager란?
팀에서 얼마간 시간을 들여 코드 제공 인프라의 이점 및 사용 가능한 다양한 접근 방식을 파악했다고 가정해 보겠습니다. 회사가 급속도로 성장하고 있으며, 팀에서는 Azure에 상당한 수의 리소스를 배포할 것임을 알고 있습니다. 팀은 선언형 코드 제공 인프라가 리소스 프로비전에 적합한 접근 방식이라고 결정했습니다. 팀에서는 모든 배포 단계를 나열하는 스크립트를 유지 관리하지 않으려고 합니다. 첫 번째 템플릿 빌드 프로세스를 시작하기 전에 Azure Resource Manager 작동 방식을 이해해야 합니다. Azure에서 사용할 수 있는 템플릿 유형을 조사하면 코드 제공 인프라 전략의 다음 단계를 결정하는 데 도움이 됩니다.
이 단원에서는 Resource Manager 및 두 가지 Resource Manager 템플릿 형식에 대해 알아봅니다.
Azure Resource Manager 개념
Azure Resource Manager는 Azure에서 리소스를 배포하고 관리하는 데 사용되는 서비스입니다. Resource Manager를 사용하여 Azure 구독에서 리소스를 만들고, 업데이트하고, 삭제할 수 있습니다. Azure Portal을 비롯한 다양한 도구를 사용하여 Resource Manager와 상호 작용할 수 있습니다. 또한 Resource Manager는 배포 후 리소스를 관리하는 데 도움이 되는 액세스 제어, 감사 및 태그 지정과 같은 일련의 다른 기능도 제공합니다.
용어
Resource Manager를 사용하여 클라우드 여정을 시작할 때 몇 가지 용어와 개념을 이해하는 것이 중요합니다.
리소스: Azure 플랫폼에서 사용할 수 있는 관리 가능한 항목입니다. 리소스의 예로는 가상 네트워크, 가상 머신, 스토리지 계정, 웹앱, 데이터베이스가 있습니다.
리소스 그룹: Azure 솔루션 관련 리소스를 보관하는 논리적 컨테이너입니다. 리소스 그룹에는 그룹으로 관리하려는 리소스만 포함됩니다. 대부분의 Azure 리소스는 리소스 그룹에 포함됩니다. 솔루션에 가장 적합한 방식으로 어떤 리소스가 어떤 리소스 그룹에 속하는지 결정합니다.
참고
소수의 리소스는 리소스 그룹에 포함되지 않습니다. 이러한 리소스 종류는 액세스 제어 관리, 정책 적용과 같은 특정 용도로 사용됩니다. 이러한 리소스에 대해서는 이후 모듈에서 자세히 알아봅니다.
구독: 리소스 및 리소스 그룹에 대한 논리적 컨테이너와 청구 경계입니다. 각 Azure 리소스 및 리소스 그룹은 하나의 구독에만 연결됩니다.
관리 그룹: 두 개 이상의 구독을 관리하는 데 사용하는 논리적 컨테이너입니다. 상속을 통해 액세스, 정책 및 규정 준수를 효율적으로 관리하기 위해 관리 그룹, 구독, 리소스 그룹 및 리소스의 계층을 정의할 수 있습니다.
ARM 템플릿(Azure Resource Manager 템플릿) - 리소스 그룹, 구독, 관리 그룹 또는 테넌트에 배포할 하나 이상의 리소스를 정의하는 템플릿 파일입니다. 템플릿을 사용하여 일관되고 반복 가능한 방식으로 리소스를 배포할 수 있습니다. ARM 템플릿 파일에는 JSON 및 Bicep의 두 가지 유형이 있습니다. 이 모듈에서는 Bicep을 중점적으로 다룹니다.
이점
Resource Manager는 코드 제공 인프라 리소스 프로비저닝과 관련된 다양한 이점과 기능을 제공합니다.
- 솔루션의 리소스를 개별적이 아니라 그룹으로 배포, 관리 및 모니터링할 수 있습니다.
- 개발 수명 주기 전체에 걸쳐 솔루션을 다시 배포해도 리소스가 일관된 상태로 배포된다고 확신할 수 있습니다.
- 스크립트를 사용하는 대신 선언형 템플릿을 통해 인프라를 관리할 수 있습니다.
- 리소스가 올바른 순서로 배포되도록 리소스 의존성을 지정할 수 있습니다.
컨트롤 플레인 및 데이터 평면
Azure에서 컨트롤 플레인 작업과 데이터 평면 작업이라는 두 가지 유형의 작업을 실행할 수 있습니다. 컨트롤 플레인은 구독의 리소스를 관리하는 데 사용합니다. 데이터 평면은 리소스에 의해 노출되는 기능에 액세스하는 데 사용합니다.
예를 들어 컨트롤 플레인 작업을 사용하여 가상 머신을 만들지만 데이터 평면 작업을 사용하여 RDP(원격 데스크톱 프로토콜)를 통해 가상 머신에 연결합니다.
제어 평면
Azure 도구, API 또는 SDK(소프트웨어 개발 키트)에서 요청을 보내면 Resource Manager가 해당 요청을 수신하고 인증하고 권한을 부여합니다. 그런 다음 요청된 작업을 수행하는 Azure 리소스 공급자에 요청을 보냅니다. 모든 요청이 동일한 API를 통해 처리되므로 Azure에서 사용 가능한 모든 도구에서 일관적인 결과 및 기능을 볼 수 있습니다.
다음 이미지에서는 Azure 요청을 처리할 때 Resource Manager가 수행하는 역할을 보여 줍니다.
모든 컨트롤 플레인 작업 요청은 Resource Manager URL로 전송됩니다. 예를 들어, 가상 머신에 대한 만들기 또는 업데이트 작업은 컨트롤 플레인 작업입니다. 이 작업의 요청 URL은 다음과 같습니다.
PUT https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}?api-version=2022-08-01
컨트롤 플레인은 만들어야 하는 리소스와 이미 존재하는 리소스를 이해합니다. Resource Manager는 이러한 요청의 차이점을 이해하고 동일한 리소스를 만들거나 기존 리소스를 삭제하지 않습니다. 그러나 이 동작을 재정의할 수는 있습니다.
데이터 평면
데이터 평면 작업을 시작하는 경우 요청이 Azure 구독의 특정 엔드포인트로 전송됩니다. 예를 들어 Azure AI 서비스의 언어 검색 작업은 요청 URL이 다음과 같기 때문에 데이터 평면 작업입니다.
POST https://eastus.api.cognitive.microsoft.com/text/analytics/v2.0/languages
액세스 제어 및 잠금과 같은 Resource Manager 기능은 데이터 평면 작업에 항상 적용되지는 않습니다. 예를 들어 사용자가 컨트롤 플레인을 사용하여 가상 머신을 관리할 수 있는 권한은 없지만 운영 체제에 로그인할 수는 있습니다.
ARM 템플릿이란?
Azure Resource Manager 템플릿은 배포를 위한 인프라 및 구성을 정의하는 파일입니다. ARM 템플릿을 작성할 때 리소스 프로비전에 대한 선언적 접근 방식을 취합니다. 이러한 템플릿은 배포의 각 리소스를 설명하지만 리소스 배포 방법을 설명하지는 않습니다. 배포를 위해 Resource Manager에 템플릿을 제출할 때 컨트롤 플레인은 정의된 리소스를 구성되고 일관된 방식으로 배포할 수 있습니다. 이전 단원에서는 명령형 코드와 선언형 코드의 차이점에 대해 알아보았습니다.
ARM 템플릿을 사용하는 이유
리소스 프로비전을 위해 ARM 템플릿(JSON 또는 Bicep)을 사용할 경우 다음과 같이 많은 이점이 있습니다.
반복 가능한 결과: ARM 템플릿은 멱등적입니다. 즉, 동일한 템플릿을 반복적으로 배포하고 동일한 결과를 얻을 수 있습니다. 템플릿은 리소스를 복제하지 않습니다.
오케스트레이션: Resource Manager에 템플릿 배포가 제출될 때 템플릿의 리소스가 병렬로 배포됩니다. 이 프로세스를 통해 배포를 더 빠르게 완료할 수 있습니다. 한 리소스가 다른 리소스에 종속되는 경우 Resource Manager가 이러한 배포를 올바른 순서로 오케스트레이션합니다.
미리 보기: Azure PowerShell 및 Azure CLI에서 사용할 수 있는 가상 도구를 사용하여 템플릿 배포 전에 사용자 환경에 대한 변경 내용을 미리 볼 수 있습니다. 이 도구는 템플릿이 수행할 모든 만들기, 수정 및 삭제에 대해 자세히 설명합니다.
테스트 및 유효성 검사: 배포 전에 Bicep linter와 같은 도구를 사용하여 템플릿의 품질을 확인할 수 있습니다. Resource Manager에 제출된 ARM 템플릿은 배포 프로세스 전에 유효성이 검사됩니다. 이 유효성 검사는 리소스를 프로비전하기 전에 템플릿의 오류를 경고합니다.
모듈화: 템플릿을 소규모 구성 요소로 분할하고 배포 시 서로 연결할 수 있습니다.
CI/CD 통합: ARM 템플릿을 Azure DevOps, GitHub Actions 같은 여러 CI/CD 도구에 통합할 수 있습니다. 이러한 도구를 사용하여 소스 제어 및 빌드 릴리스 파이프라인을 통해 템플릿의 버전을 지정할 수 있습니다.
확장성: 배포 스크립트를 사용하면 ARM 템플릿 내에서 Bash 또는 PowerShell 스크립트를 실행할 수 있습니다. 이러한 스크립트는 배포 시 데이터 평면 작업과 같은 태스크를 수행합니다. 확장성을 통해 단일 ARM 템플릿을 사용하여 전체 솔루션을 배포할 수 있습니다.
JSON 및 Bicep 템플릿
현재 사용할 수 있는 두 가지 유형의 ARM 템플릿은 JSON 템플릿과 Bicep 템플릿입니다. JSON(JavaScript Object Notation)은 여러 언어에서 사용할 수 있는 개방형 표준 파일 형식입니다. Bicep은 더 쉬운 구문을 사용하여 ARM 템플릿을 작성하기 위해 최근에 개발된 새로운 DSL(Domain-Specific Language)입니다. ARM 템플릿 및 리소스 배포에 두 템플릿 형식 모두 사용할 수 있습니다.