Azure 머신 구성, Linux, 및 DSC 구성

발행: (2026년 1월 14일 오전 07:03 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Azure Machine Configuration, Linux 및 DSC 구성의 표지 이미지

소개

Azure Machine Configuration은 Linux VM을 지원하며, Linux 워크로드에 PowerShell DSC 구성(또는 Chef InSpec)을 적용할 수 있습니다.
Linux에서 DSC 구성을 실행하려면 VM에 AzurePolicyForLinux 확장 및 관리형 ID가 있어야 합니다. 이 확장은 PowerShell을 전용 폴더에 설치하지만 시스템 PATH에 추가하지 않으므로 PowerShell은 정책 엔진을 통해서만 호출될 수 있습니다.

Linux용 DSC 리소스

Linux용으로 가장 기능이 완전한 DSC 리소스 세트는 NxTools 모듈입니다. 이 모듈은 일반적인 Linux 명령을 감싸는 POSIX‑스타일 래퍼를 제공하며 다음 DSC 리소스를 포함합니다:

  • nxFiles – 파일 및 폴더 관리
  • nxGroup – 그룹 및 그룹 멤버십 관리
  • nxUser – 사용자 관리
  • nxPackages – 패키지 관리 (apt만 지원)
  • nxService – 서비스 관리 (systemd)
  • nxScript – DSC 구성 내에서 임의의 스크립트 실행

이 모듈은 Azure Machine Configuration과 함께 사용할 것을 권장합니다.
GitHub: (link omitted in original)

Source:

Demo DSC Configuration

아래 예제는 DevTo 사용자를 생성하고 publishers 그룹에 추가한 뒤, nxScript 리소스를 사용하여 /home/DevTo/publisher.txt 파일이 존재하도록 보장합니다.

configuration demoDSCLinux
{
    Import-DscResource -ModuleName 'nxtools'

    nxUser ensureDevToUser {
        Ensure        = 'Present'
        UserName      = 'DevTo'
        FullName      = 'Dev To Demo user'
        HomeDirectory = '/home/DevTo'
        Description   = 'Ensure that DevTo user is present on the system'
    }

    nxGroup ensurePublishersGroup {
        # The group must be present and have DevTo as a member
        Ensure    = 'Present'
        GroupName = 'publishers'
        Members   = @('DevTo')
    }

    nxScript ensurePublisherFilePresent {
        GetScript = {
            $Reason = [Reason]::new()
            $Reason.Code   = "Script:Script:FileMissing"
            $Reason.Phrase = "File does not exist"

            if (Test-Path -Path "/home/DevTo/publisher.txt") {
                $Reason.Code   = "Script:Script:Success"
                $Reason.Phrase = "File exists"
            }

            return @{ Reasons = @($Reason) }
        }

        TestScript = {
            Test-Path -Path "/home/DevTo/publisher.txt"
        }

        SetScript = {
            $null = New-Item -Path "/home/DevTo/publisher.txt" -ItemType "File" -Force
        }
    }
}
  • 첫 번째 두 리소스는 DevTo 사용자와 publishers 그룹을 생성하고, 사용자를 해당 그룹에 추가합니다.
  • nxScript 리소스는 파일의 존재 여부를 보장하며, 구성 상태가 비준수일 때 Azure Portal에 표시되는 Reason 객체를 제공합니다.

구성 컴파일 및 패키징

DSC 구성은 AzurePolicyForLinux 확장이 Linux용 PowerShell을 필요로 하기 때문에 Linux 호스트(또는 Linux CI 러너)에서 컴파일해야 합니다.

# Verify the script is running on Linux
if ($IsLinux -eq $false) {
    Write-Error "This script must be run on a Linux system."
    exit 1
}

# Install required modules
Install-Module -Name nxtools -Force
Install-Module -Name PSDesiredStateConfiguration -RequiredVersion 3.0.0-beta1 -Force -AllowPrerelease
Install-Module -Name GuestConfiguration -RequiredVersion 4.1.0 -Force

# Load the DSC configuration script
. ./DSC-Linux/demolinux.dsc.ps1

# Compile the configuration
demoDSCLinux

# Rename the generated MOF file
Rename-Item -Path .\demoDSCLinux\localhost.mof -NewName demoDSCLinux.mof -Force

# Create the Guest Configuration package for Azure Machine Configuration
New-GuestConfigurationPackage `
    -Name "demoDSCLinux" `
    -Type AuditAndSet `
    -Configuration .\demoDSCLinux\demoDSCLinux.mof `
    -Force $true

스크립트:

  1. Linux에서 실행 중인지 확인합니다.
  2. nxtools, PSDesiredStateConfiguration, GuestConfiguration을 설치합니다.
  3. DSC 구성 파일을 가져와 컴파일하여 MOF 파일을 생성합니다.
  4. MOF를 Azure Machine Configuration을 통해 Linux VM에 배포할 수 있는 Guest Configuration 패키지로 패키징합니다.
Back to Blog

관련 글

더 보기 »

Terraform으로 해결하는 방법?

markdown !Forem 로고 https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2...