다음을 통해 공유


Azure Automation 상태 구성에서 컴퓨터로의 구성 마이그레이션 계획

컴퓨터 구성은 Azure Automation State Configuration(Azure Automation Desired State Configuration 또는 AADSC라고도 함)에서 제공하는 기능의 최신 구현입니다. 가능하면 콘텐츠 및 머신을 새 서비스로 이동하는 계획을 세워야 합니다. 이 문서에서는 Azure Automation에서 컴퓨터 구성으로 마이그레이션의 전략을 개발하기 위한 지침을 제공합니다.

컴퓨터 구성의 새로운 기능은 고객 요청을 해결합니다.

  • 구성 크기 제한을 100MB로 늘렸습니다.
  • 리소스 ID 및 상태를 포함하여 Azure Resource Graph를 통한 고급 보고
  • 동일한 머신에 대한 여러 구성 관리
  • 머신이 원하는 상태를 벗어날 때 수정 시기를 제어합니다.
  • Linux 및 Windows 모두 PowerShell 기반 DSC 리소스를 사용합니다.

시작하기 전에 Azure Policy의 컴퓨터 구성 페이지에서 개념적 개요 정보를 참조하는 것이 좋습니다.

마이그레이션 이해

마이그레이션에 접근하는 가장 좋은 방법은 먼저 콘텐츠를 재배포한 후 머신을 마이그레이션하는 것입니다. 이 섹션에서는 예상되는 마이그레이션 단계를 간략하게 설명합니다.

  1. Azure Automation에서 구성 내보내기
  2. 모듈 요구 사항을 검색하고 사용자 환경에서 로드
  3. 구성 컴파일
  4. 컴퓨터 구성 패키지 만들기 및 게시
  5. 컴퓨터 구성 패키지 테스트
  6. 하이브리드 머신을 Azure Arc에 온보딩
  7. Azure Automation State Configuration에서 서버 등록 취소
  8. 컴퓨터 구성을 사용하여 서버에 구성 할당

컴퓨터 구성은 PowerShell 버전 7과 함께 DSC 버전 3을 사용합니다. DSC 버전 3은 Windows Linux의 이전 DSC 버전과 함께 사용할 수 있습니다. 구현은 별개입니다. 그러나 충돌 검색은 없습니다.

컴퓨터 구성에서는 모듈 또는 구성을 서비스에 게시하거나 서비스에서 컴파일할 필요가 없습니다. 대신, 특별히 빌드된 도구를 사용하여 콘텐츠를 개발 및 테스트하고 컴퓨터가 HTTPS(일반적으로 Azure Blob Storage)를 통해 연결할 수 있는 모든 위치에 콘텐츠를 게시합니다.

일정 기간 동안 두 서비스 모두에 컴퓨터를 사용하기로 결정한 경우 기술적인 장벽이 없습니다. 두 서비스는 독립적입니다.

Azure Automation에서 콘텐츠 내보내기

먼저 Azure Automation State Configuration에서 콘텐츠를 검색하고, 컴퓨터 구성용 콘텐츠 패키지를 만들고 테스트하고 게시하는 개발 환경으로 내보냅니다.

구성

Azure Automation에서는 구성 스크립트만 내보낼 수 있습니다. 노드 구성 또는 컴파일된 MOF 파일을 내보낼 수 없습니다. MOF 파일을 Automation 계정에 직접 게시하고 더 이상 원래 파일에 액세스할 수 없는 경우 프라이빗 구성 스크립트에서 다시 컴파일해야 합니다. 원래 구성을 찾을 수 없는 경우 다시 작성해야 합니다.

Azure Automation에서 구성 스크립트를 내보내려면 먼저 Automation 계정이 배포된 리소스 그룹의 구성과 이름이 있는 Azure Automation 계정을 식별합니다.

PowerShell 모듈 Az. Automation을 설치합니다.

Install-Module -Name Az.Automation

그런 다음, Get-AzAutomationAccount 명령을 사용하여 Automation 계정 및 해당 계정이 배포된 리소스 그룹을 확인합니다. ResourceGroupNameAutomationAccountName 속성은 다음 단계에서 중요합니다.

Get-AzAutomationAccount
SubscriptionId        : <your-subscription-id>
ResourceGroupName     : <your-resource-group-name>
AutomationAccountName : <your-automation-account-name>
Location              : centralus
State                 :
Plan                  :
CreationTime          : 6/30/2021 11:56:17 AM -05:00
LastModifiedTime      : 6/30/2021 11:56:17 AM -05:00
LastModifiedBy        :
Tags                  : {}

Automation 계정에서 구성을 검색합니다. 출력에는 구성당 하나의 항목이 있습니다. 많은 경우에는 정보를 변수로 저장하여 쉽게 작업할 수 있도록 합니다.

$getParams = @{
    ResourceGroupName     = '<your-resource-group-name>'
    AutomationAccountName = '<your-automation-account-name>'
}

Get-AzAutomationDscConfiguration @getParams
ResourceGroupName     : <your-resource-group-name>
AutomationAccountName : <your-automation-account-name>
Location              : centralus
State                 : Published
Name                  : <your-configuration-name>
Tags                  : {}
CreationTime          : 6/30/2021 12:18:26 PM -05:00
LastModifiedTime      : 6/30/2021 12:18:26 PM -05:00
Description           :
Parameters            : {}
LogVerbose            : False

마지막으로 Export-AzAutomationDscConfiguration 명령을 사용하여 각 구성을 로컬 스크립트 파일로 내보냅니다. 결과 파일 이름에는 \ConfigurationName.ps1 패턴이 사용됩니다.

$exportParams = @{
    OutputFolder          = '<location-on-your-machine>'
    ResourceGroupName     = '<your-resource-group-name>'
    AutomationAccountName = '<your-automation-account-name>'
    Name                  = '<your-configuration-name>'
}
Export-AzAutomationDscConfiguration @exportParams
UnixMode   User             Group                 LastWriteTime           Size Name
--------   ----             -----                 -------------           ---- ----
                                               12/31/1600 18:09

PowerShell 파이프라인을 사용하여 구성 내보내기

계정 및 구성 수를 검색한 후에는 머신의 로컬 폴더로 모든 구성을 내보낼 수 있습니다. 이 프로세스를 자동화하려면 이전 예의 각 명령 출력을 다음 명령으로 파이프합니다.

이 예에서는 5개의 구성을 내보냅니다. 출력 패턴은 성공을 나타내는 유일한 표시기입니다.

Get-AzAutomationAccount |
    Get-AzAutomationDscConfiguration |
    Export-AzAutomationDSCConfiguration -OutputFolder <location on your machine>
UnixMode   User             Group                 LastWriteTime           Size Name
--------   ----             -----                 -------------           ---- ----
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09

복합 구성 파일 분해에 대한 고려

컴퓨터 구성은 컴퓨터당 둘 이상의 구성을 관리할 수 있습니다. Azure Automation State Configuration에 대해 작성된 많은 구성에서는 각 머신에 단일 구성을 관리하는 제한이 있었습니다. 컴퓨터 구성이 제공하는 확장된 기능을 활용하려면 대규모 구성 파일을 각각 특정 시나리오를 처리하는 여러 개의 작은 구성으로 나눌 수 있습니다.

구성이 정렬되는 순서를 제어하는 컴퓨터 구성에는 오케스트레이션이 없습니다. 순차적으로 수행해야 하는 경우 구성의 단계를 한 패키지에 함께 유지합니다.

모듈

Azure Automation에서 모듈을 내보내거나 어떤 구성에 어떤 모듈과 버전이 필요한지 자동으로 상관관계를 지정할 수 없습니다. 새 컴퓨터 구성 패키지를 만들려면 모듈이 로컬 환경에 있어야 합니다. 마이그레이션에 필요한 모듈 목록을 만들려면 PowerShell을 사용하여 모듈의 이름 및 버전에 대한 Azure Automation을 쿼리합니다.

사용자 지정으로 작성되었으며 전용 프라이빗 개발 환경에만 존재하는 모듈을 사용하는 경우 Azure Automation에서 내보낼 수 없습니다.

구성에 필요한 환경과 계정에서 사용자 지정 모듈을 찾을 수 없는 경우 구성을 컴파일할 수 없습니다. 따라서 구성을 마이그레이션할 수 없습니다.

Azure Automation에서 가져온 모듈 나열

자동화 계정에 설치된 모든 모듈 목록을 검색하려면 Get-AzAutomationModule 명령을 사용합니다. IsGlobal 속성은 모듈이 항상 Azure Automation에 기본 제공되는지 아니면 계정에 게시되었는지를 알려 줍니다.

예를 들어 계정에 게시된 모든 모듈 목록을 만들려 하는 경우입니다.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $false

또한 PowerShell 갤러리를 사용하여 공개적으로 사용할 수 있는 모듈에 대한 세부 정보를 쉽게 찾을 수 있습니다. 다음 예에서는 새 Automation 계정에 기본 제공되고 DSC 리소스를 포함하는 모듈을 나열합니다.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $true |
    Find-Module -ErrorAction SilentlyContinue |
    Where-Object {'' -ne $_.Includes.DscResource} |
    Select-Object -Property Name, Version -Unique |
    Format-Table -AutoSize
Name                       Version
----                       -------
AuditPolicyDsc             1.4.0
ComputerManagementDsc      8.4.0
PSDscResources             2.12.0
SecurityPolicyDsc          2.10.0
xDSCDomainjoin             1.2.23
xPowerShellExecutionPolicy 3.1.0.0
xRemoteDesktopAdmin        1.1.0.0

PowerShell 갤러리에서 모듈을 가져온 경우에는 Find-Module에서 직접 출력을 Install-Module로 파이프할 수 있습니다. 현재 Automation 계정에 있는 모든 모듈을 PowerShell 갤러리에서 사용 가능한 경우 명령 전체에 걸쳐 출력을 파이핑하여 개발자 환경을 로드하는 솔루션을 제공합니다.

로컬 환경에 피드를 PowerShellGet 리포지토리로 등록한 경우 동일한 방식을 사용하여 사용자 지정 NuGet 피드에서 모듈을 가져올 수 있습니다.

이 예제의 Find-Module 명령은 오류를 제거하지 않습니다. 즉, 갤러리에서 찾을 수 없는 모듈은 오류 메시지를 반환합니다.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $false |
    Find-Module |
    Where-Object { '' -ne $_.Includes.DscResource } |
    Install-Module

모듈 요구 사항에 대한 구성 스크립트 검사

Azure Automation에서 구성 스크립트를 내보낸 경우, 각 구성을 MOF 파일로 컴파일하는 데 필요한 모듈에 대한 상세 내용을 검토할 수도 있습니다. 이 방식은 모듈이 제거된 Automation 계정에서 구성을 찾는 경우에만 필요합니다. 이러한 구성은 더 이상 머신에는 유용하지 않지만, 아직도 계정에 있을 수 있습니다.

각 파일 상단에서 Import-DscResource가 포함된 줄을 찾습니다. 이 명령은 구성 내에서만 적용되며 컴파일 시 모듈을 로드하는 데 사용됩니다.

예를 들어, PowerShell 갤러리의 WindowsIISServerConfig 구성에는 이 예의 줄이 있습니다.

configuration WindowsIISServerConfig
{

Import-DscResource -ModuleName @{ModuleName = 'xWebAdministration';ModuleVersion = '1.19.0.0'}
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'

구성하려면 xWebAdministration 모듈 버전 1.19.0.0 및 PSDesiredStateConfiguration 모듈이 필요합니다.

Azure 컴퓨터 구성의 콘텐츠 테스트

Azure Automation State Configuration의 콘텐츠를 컴퓨터 구성과 함께 사용할 수 있는지 평가하려면 사용자 지정 컴퓨터 구성 패키지 아티팩트를 만드는 방법 페이지의 단계별 자습서를 따릅니다.

구성 작성 단계가 되면 MOF 파일을 생성하는 구성 스크립트는 Azure Automation State Configuration에서 내보낸 스크립트 중 하나여야 합니다. 구성을 MOF 파일로 컴파일하고 컴퓨터 구성 패키지를 만들려면 먼저 필요한 PowerShell 모듈이 환경에 설치되어 있어야 합니다.

모듈이 컴퓨터 구성에서 작동하지 않으면 어떻게 되나요?

일부 모듈에는 컴퓨터 구성과의 호환성 문제가 있을 수 있습니다. 가장 일반적인 문제는 .NET Framework와 .NET Core의 차이와 관련된 것입니다. 자세한 기술 정보는 Windows PowerShell 5.1과 PowerShell 7.x의 차이점 페이지에서 확인할 수 있습니다.

호환성 문제를 해결하는 한 가지 옵션은 powershell.exe를 실행하여 PowerShell 7에서 가져온 모듈 내에서 Windows PowerShell 명령을 실행하는 것입니다. Windows DSC 구성 상태를 감사하는 데 사용되는 Azure Policy 리포지토리에서 이 기술을 사용하는 샘플 모듈을 검토할 수 있습니다.

또한 이 예제에서는 작은 개념 증명을 보여 줍니다.

# example function that could be loaded from module
function New-TaskResolvedInPWSH7 {
    # runs the fictitious command 'Get-myNotCompatibleCommand' in Windows PowerShell
    $compatObject = & powershell.exe -NoProfile -NonInteractive -Command {
        Get-myNotCompatibleCommand
    }
    # resulting object can be used in PowerShell 7
    return $compatObject
}

마이그레이션하는 모든 모듈의 Get-TargetResource에 Reasons 속성을 추가해야 하나요?

Reasons 속성을 구현하면 Azure Portal에서 구성 할당 결과를 볼 때 개선된 환경을 제공합니다. 모듈의 Get 메서드에 Reasons가 포함되지 않은 경우 Get 메서드에서 반환한 속성의 세부 정보와 함께 제네릭 출력이 반환됩니다. 따라서 마이그레이션할 때 이는 선택 사항입니다.

머신

컴퓨터 구성에서 Azure Automation State Configuration의 콘텐츠에 대한 테스트가 완료되면 컴퓨터 마이그레이션 계획을 개발합니다.

Azure의 가상 머신과 Azure 외부에 있는 하이브리드 머신 모두에 Azure Automation State Configuration을 사용할 수 있습니다. 여러 단계를 사용하여 이러한 각 시나리오에 대한 계획을 세워야 합니다.

Azure VMs

Azure 가상 머신에는 이미 Azure의 리소스가 있습니다. 즉, 구성에 연결하는 컴퓨터 구성을 할당할 준비가 것입니다. Azure 가상 머신을 마이그레이션하는 개략적인 작업은 Azure Automation State Configuration에서 제거한 다음, 컴퓨터 구성을 사용하여 구성을 할당하는 것입니다.

Azure Automation State Configuration에서 머신을 제거하려면 Automation State Configuration에서 구성과 노드를 제거하는 방법 페이지의 단계를 따르세요.

컴퓨터 구성을 사용하여 구성을 할당하려면 빠른 시작: 비준수 리소스를 식별하는 정책 할당 만들기와 같은 Azure Policy 빠른 시작의 단계를 따릅니다. 정책 정의를 선택하는 6단계에서는 Azure Automation State Configuration에서 마이그레이션한 구성을 적용하는 정의를 선택합니다.

하이브리드 머신

Azure 외부의 머신은 Azure Automation State Configuration에 등록할 수 있지만 Azure에는 머신 리소스가 없습니다. 컴퓨터 내부의 LCM(로컬 Configuration Manager) 서비스는 Azure Automation에 대한 연결을 처리합니다. 노드의 레코드는 Azure Automation 공급자 형식의 리소스로 관리됩니다.

Azure Automation State Configuration에서 머신을 제거하기 전에 각 노드를 Azure Arc 사용 서버로 온보딩합니다. Azure Arc에 온보딩하면 Azure Policy에서 컴퓨터를 관리할 수 있도록 Azure에 컴퓨터 리소스가 만들어집니다. 컴퓨터는 언제든지 Azure Arc로 온보딩될 수 있지만, Azure Automation State Configuration을 사용하여 해당 프로세스를 자동화할 수 있습니다.

콘텐츠를 내보낼 때의 문제 해결

알려진 문제에 대한 세부 정보가 이 섹션에 제공됩니다.

구성 결과를 내보내면 파일 이름에 ‘\’ 문자가 생김

macOS 및 Linux에서 PowerShell을 사용하는 경우 Export-AzAutomationDSCConfiguration에서 출력되는 파일 이름을 처리하는 데 문제가 있을 수 있습니다.

이 문제를 해결하기 위해 AADSCConfigContent라는 PowerShell 갤러리에 모듈이 게시되었습니다. 모듈에는 서비스에 대한 REST 요청을 수행하여 Azure Automation에 저장된 구성의 콘텐츠를 내보내는 명령만 있습니다.

다음 단계