Azure 머신 구성, Linux, 및 DSC 구성
Source: Dev.to

소개
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
스크립트:
- Linux에서 실행 중인지 확인합니다.
nxtools,PSDesiredStateConfiguration,GuestConfiguration을 설치합니다.- DSC 구성 파일을 가져와 컴파일하여 MOF 파일을 생성합니다.
- MOF를 Azure Machine Configuration을 통해 Linux VM에 배포할 수 있는 Guest Configuration 패키지로 패키징합니다.