자습서: Automation에서 PowerShell 워크플로 Runbook 만들기

이 자습서에서는 Azure Automation에서 PowerShell 워크플로 Runbook을 만드는 방법에 대해 설명합니다. PowerShell 워크플로 Runbook은 Windows PowerShell 워크플로를 기반으로 하는 텍스트 Runbook입니다. Azure Portal에서 텍스트 편집기를 사용하여 Runbook의 코드를 만들고 편집할 수 있습니다.

참고 항목

이 문서는 PowerShell 5.1에 적용됩니다. PowerShell 7.1(미리 보기) 및 PowerShell 7.2는 워크플로를 지원하지 않습니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • PowerShell 워크플로 Runbook 만들기
  • Runbook 테스트 및 게시
  • Runbook 작업의 상태 실행 및 추적
  • Azure 리소스를 관리하는 인증 추가
  • Runbook 매개 변수를 업데이트하여 Azure 가상 머신 시작

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

사전 요구 사항

  • 사용자 할당 관리 ID가 하나 이상 있는 Azure Automation 계정. 자세한 내용은 관리 ID 사용을 참조하세요.
  • Az 모듈: Az.AccountsAz.Compute Automation 계정으로 가져옵니다. 자세한 내용은 Az 모듈 가져오기를 참조하세요.
  • 2개 이상의 Azure 가상 머신. 이러한 컴퓨터를 중지하고 시작하므로 프로덕션 VM이 되어서는 안 됩니다.
  • 컴퓨터에 설치된 Azure Az PowerShell 모듈입니다. 설치 또는 업그레이드하려면 Azure Az PowerShell 모듈을 설치하는 방법을 참조 하세요.

관리 ID에 사용 권한 할당

적절한 관리 ID 에 권한을 할당하여 가상 머신을 중지할 수 있도록 합니다. Runbook은 Automation 계정의 시스템이 할당한 관리 ID 또는 사용자가 할당한 관리 ID를 사용할 수 있습니다. 각 ID에 권한을 할당하는 단계가 제공됩니다. 아래 단계에서는 Azure Portal을 사용합니다. PowerShell을 사용하려면 Azure PowerShell을 사용하여 Azure 역할 할당을 참조하세요.

  1. Azure Portal에 로그인하고 Azure Automation 계정으로 이동합니다.

  2. 계정 설정에서 ID(미리 보기)를 선택합니다.

  3. 시스템 할당 탭의 사용 권한 아래에서 Azure 역할 할당을 선택하여 Azure 역할 할당 페이지를 엽니다.

    Selecting Azure role assignments in portal.

  4. + 역할 할당 추가(미리 보기)를 선택하여 역할 할당 추가(미리 보기) 페이지를 엽니다.

    Add role assignments in portal.

  5. 적절한 값을 선택합니다.

    속성 Description
    범위 범위는 역할 할당이 적용되는 리소스 집합입니다. 드롭다운 목록에서 리소스 그룹을 선택합니다.
    구독 이 필드는 구독으로 자동 채워져야 합니다.
    리소스 그룹 드롭다운 목록에서 ID 권한을 부여할 리소스 그룹을 선택합니다.
    역할 드롭다운 목록에서 DevTest Labs 사용자를 선택합니다.
  6. 저장을 선택한 다음, Azure 역할 할당 페이지를 닫아 시스템 할당 탭으로 돌아갑니다.

  7. 사용자 할당 탭을 선택합니다.

  8. 목록에서 사용자 할당 관리 ID를 선택하여 관리 ID 페이지를 엽니다.

    Selecting user-assigned managed identity in portal.

  9. 나중에 사용할 수 있도록 클라이언트 ID를 기록해 둡니다.

    Showing Client ID for managed identity in portal

  10. 왼쪽 메뉴에서 Azure 역할 할당을 선택한 다음 + 역할 할당 추가(미리 보기)를 선택하여 역할 할당 추가(미리 보기) 페이지를 엽니다.

    Add role assignments in portal for user-assigned identity.

  11. 적절한 값을 선택합니다.

    속성 Description
    범위 드롭다운 목록에서 리소스 그룹을 선택합니다.
    구독 이 필드는 구독으로 자동 채워져야 합니다.
    리소스 그룹 드롭다운 목록에서 ID 권한을 부여할 리소스 그룹을 선택합니다.
    역할 드롭다운 목록에서 DevTest Labs 사용자를 선택합니다.
  12. 저장을 선택한 다음, Azure 역할 할당 페이지를 닫아 사용자 할당 탭으로 돌아갑니다.

새 Runbook 만들기

먼저 간단한 PowerShell 워크플로 Runbook을 만듭니다. Windows PowerShell 워크플로의 이점 중 하나는 일반적인 스크립트의 경우와 마찬가지로 명령 집합을 순차적으로 수행하지 않고 병렬로 수행하는 기능입니다.

참고 항목

릴리스 Runbook을 만드는 경우 Azure Portal에서 새로운 환경을 제공합니다. Runbook 블레이드> Runbook 만들기를 선택하면 해당 옵션을 사용하여 Runbook 만들기 새 페이지가 열립니다.

  1. 열려 있는 Automation 계정 페이지의 프로세스 자동화에서 Runbook을 선택합니다.

    Create PowerShell workflow runbook from portal

  2. + Runbook 만들기를 선택합니다.

    1. Runbook의 이름을 지정합니다. 예를 들어 test입니다.
    2. Runbook 유형 드롭다운 메뉴에서 PowerShell 워크플로를 선택합니다.
    3. 런타임 버전 드롭다운에서 5.1을 선택합니다.
    4. 해당하는 설명을 입력합니다.
    5. 만들기를 실행합니다.

    PowerShell workflow runbook options from portal

Runbook에 코드 추가

Runbook에 직접 코드를 입력하거나 라이브러리 컨트롤에서 cmdlet, Runbook 및 자산을 선택하고 관련 매개 변수를 사용하여 Runbook에 추가할 수 있습니다. 이 자습서에서는 Runbook에 직접 코드를 입력합니다.

Runbook은 현재 필요한 Workflow 키워드(keyword), Runbook의 이름 및 전체 워크플로를 포함하는 중괄호로만 비어 있습니다.

Workflow MyFirstRunbook-Workflow
{
}
  1. Parallel 키워드를 사용하여 동시에 실행되는 여러 명령이 포함된 스크립트 블록을 만들 수 있습니다. 중괄호 사이에 다음 코드를 입력합니다.

    Parallel {
         Write-Output "Parallel"
         Get-Date
         Start-Sleep -s 3
         Get-Date
     }
    
    Write-Output " `r`n"
    Write-Output "Non-Parallel"
    Get-Date
    Start-Sleep -s 3
    Get-Date
    
  2. 저장을 선택하여 Runbook을 저장합니다.

Runbook 테스트

프로덕션 환경에서 사용할 수 있도록 Runbook을 게시하기 전에 제대로 작동하는지 테스트해야 합니다. Runbook을 테스트하면 초안 버전이 실행되고 출력을 대화형으로 볼 수 있습니다.

  1. 테스트 창을 선택하여 테스트 페이지를 엽니다.

  2. 시작을 선택하여 테스트를 시작합니다. Runbook 작업이 만들어지고 해당 상태 창에 표시됩니다.

    작업 상태는 '대기'로 시작됩니다. 이는 클라우드에서 runbook worker를 사용할 수 있을 때까지 작업에서 기다리고 있음을 나타냅니다. 상태 작업자가 작업을 클레임할 때 시작으로 변경됩니다. 마지막으로 Runbook이 실제로 실행되기 시작하면 상태가 '실행 중'이 됩니다.

  3. Runbook 작업이 완료되면 테스트 페이지에 해당 출력이 표시됩니다. 출력은 다음 이미지와 유사해야 합니다.

    PowerShell workflow runbook parallel output

    출력을 검토합니다. 명령을 포함하여 블록의 ParallelStart-Sleep 모든 항목이 동시에 실행됩니다. 다른 날짜 타임스탬프를 통해 표시된 것처럼 블록 외부 Parallel 의 동일한 명령이 순차적으로 실행되었습니다.

  4. 테스트 페이지를 닫아 캔버스로 돌아갑니다.

Runbook 게시 및 시작

만든 Runbook은 여전히 초안 모드에 있습니다. 프로덕션 환경에서 실행하려면 먼저 게시해야 합니다. Runbook을 게시할 때는 기존 게시된 버전을 초안 버전으로 덮어쓰게 됩니다. 이 경우 Runbook을 방금 만들었기 때문에 아직 게시된 버전이 없습니다.

  1. 게시를 선택하여 Runbook을 게시한 다음 메시지가 표시되면 예입니다.

  2. 이제 상태 필드에 게시됨이 표시됩니다. 현재 Runbook을 시작하거나, 향후 시작 시간을 예약하거나, HTTP 호출을 통해 Runbook을 시작할 수 있도록 웹후크를 만들 수 있는 위쪽의 옵션을 검토합니다. 시작을 선택하고 Runbook을 시작할지 확인하는 메시지가 표시되면 를 선택합니다.

    PowerShell workflow runbook overview page

  3. 생성된 Runbook 작업에 대한 작업 페이지가 열립니다. 이 경우 작업의 진행 상황을 볼 수 있도록 페이지를 열어 둡니다. 상태 필드는 Runbook을 테스트할 때 본 상태 일치합니다.

    Screenshot of the runbook Job page.

  4. Runbook 상태 완료됨이 표시되면 출력을 선택합니다. 출력은 테스트 출력과 비슷합니다.

  5. Runbook 개요 페이지로 돌아가려면 작업 페이지를 닫습니다.

  6. 리소스 아래에서 작업을 선택합니다. 이 페이지에는 Runbook에서 만든 모든 작업이 나열됩니다. 여기서는 작업을 한 번만 실행했으므로 하나의 작업만 나열됩니다.

  7. Runbook을 시작할 때 본 것과 동일한 작업 페이지를 열려면 작업을 선택합니다. 이 페이지를 사용하여 Runbook에 대해 만든 작업의 세부 정보를 볼 수 있습니다. Runbook 개요 페이지로 돌아가려면 작업 페이지를 닫습니다.

Azure 리소스를 관리하는 인증 추가

Runbook을 테스트하고 게시했지만 지금까지는 유용한 작업을 수행하지 않습니다. Azure 리소스를 관리하려고 합니다. 구독에 대한 자격 증명을 사용하여 인증하지 않으면 이 작업을 수행할 수 없습니다. Runbook은 Automation 계정의 시스템 할당 관리 ID를 사용하여 Azure로 인증하여 VM에 대한 관리 작업을 수행합니다. Runbook은 사용자가 할당한 관리 ID를 사용하도록 쉽게 수정할 수 있습니다.

  1. 개요를 선택한 다음, 편집을 선택하여 텍스트 편집기를 엽니다.

  2. 기존 코드를 다음으로 바꿉니다.

    workflow MyFirstRunbook-Workflow
    {
    $resourceGroup = "resourceGroupName"
    
    # Ensures you do not inherit an AzContext in your runbook
    Disable-AzContextAutosave -Scope Process
    
    # Connect to Azure with system-assigned managed identity
    Connect-AzAccount -Identity
    
    # set and store context
    $AzureContext = Set-AzContext –SubscriptionId "<SubscriptionID>"
    }
    

    $resourceGroup 리소스 그룹을 나타내는 유효한 값으로 변수를 편집합니다.

  3. 시스템이 할당한 관리 ID를 사용하여 Runbook을 실행하려면 코드를 그대로 둡니다. 사용자 할당 관리 ID를 사용하려는 경우 다음을 수행합니다.

    1. 줄 9에서 제거 Connect-AzAccount -Identity,
    2. Connect-AzAccount -Identity -AccountId <ClientId>로 바꿉니다.
    3. 이전에 얻은 클라이언트 ID를 입력합니다.
  4. 저장을 선택한 후 테스트 창을 선택합니다.

  5. 시작을 선택하여 테스트를 시작합니다. 완료되면 다음과 비슷한 출력이 표시됩니다. 여기서는 계정의 기본 정보를 보여 줍니다. 이 작업은 자격 증명이 유효한지 확인합니다.

    Basic information that confirms credentials.

  6. 테스트 페이지를 닫아 캔버스로 돌아갑니다.

가상 머신을 시작하기 위한 코드 추가

이제 Runbook이 Azure 구독에 인증되므로 리소스를 관리할 수 있습니다. 가상 머신을 시작하는 명령을 추가합니다. Azure 구독에서 VM을 선택할 수 있으며 지금은 Runbook에서 해당 이름을 하드 코딩하고 있습니다.

  1. 아래 코드를 닫는 중괄호 바로 앞에 마지막 줄로 추가합니다. VM의 실제 이름으로 바꿉 VMName 습니다.

    Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  2. Runbook을 테스트하고 VM이 시작되었는지 확인합니다. 그런 다음 캔버스로 돌아갑니다.

Runbook에 입력 매개 변수 추가

Runbook은 현재 Runbook에서 하드 코딩한 VM을 시작합니다. Runbook이 시작될 때 VM을 지정할 수 있는 경우 더 유용합니다. Runbook에 입력 매개 변수를 추가하여 해당 기능을 제공합니다.

  1. 줄 3을 $resourceGroup = "resourceGroupName"다음으로 바꿉다.

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. 이전 Start-AzVM 명령을 다음으로 바꿉다.

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. Runbook을 테스트하고 VM이 시작되었는지 확인합니다. 그런 다음 캔버스로 돌아갑니다.

여러 VM을 동시에 관리

ForEach -Parallel 구문을 사용하여 컬렉션의 각 항목에 대한 명령을 동시에 처리할 수 있습니다. 이제 Runbook이 다음을 수행하게 되도록 코드를 수정합니다.

  • 가상 머신 이름 컬렉션을 수락합니다.
  • 가상 머신을 중지하거나 시작하는 매개 변수 수락
  • 모든 가상 머신에 대해 병렬로 작업 수행
  1. 모든 기존 코드를 다음으로 바꿉니다.

    workflow MyFirstRunbook-Workflow
    {
       Param(
           [string]$resourceGroup,
           [string[]]$VMs,
           [string]$action
       )
    
       # Ensures you do not inherit an AzContext in your runbook
       Disable-AzContextAutosave -Scope Process
    
       # Connect to Azure with system-assigned managed identity
       Connect-AzAccount -Identity
    
       # set and store context
       $AzureContext = Set-AzContext –SubscriptionId "<SubscriptionID>"
    
       # Start or stop VMs in parallel
       if ($action -eq "Start") {
           ForEach -Parallel ($vm in $VMs)
           {
               Start-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
           }
       }
       elseif ($action -eq "Stop") {
           ForEach -Parallel ($vm in $VMs)
           {
               Stop-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext -Force
           }
       }
       else {
           Write-Output "`r`n Action not allowed. Please enter 'stop' or 'start'."
       }
       }
    
  2. 시스템이 할당한 관리 ID를 사용하여 Runbook을 실행하려면 코드를 그대로 둡니다. 사용자 할당 관리 ID를 사용하려는 경우 다음을 수행합니다.

    1. 줄 9에서 제거 Connect-AzAccount -Identity,
    2. Connect-AzAccount -Identity -AccountId <ClientId>로 바꿉니다.
    3. 이전에 얻은 클라이언트 ID를 입력합니다.
  3. 저장을 선택한 다음 게시를 선택한 다음 메시지가 표시되면 예를 선택합니다.

  4. 개요 페이지에서 시작을 선택합니다.

  5. 매개 변수를 채인 다음 확인을 선택합니다.

    매개 변수 설명
    RESOURCEGROUP VM의 리소스 그룹 이름을 입력합니다.
    VM ["VM1","VM2","VM3"] 구문을 사용하여 가상 머신의 이름을 입력합니다.
    작업 Enter stop 또는 start.
  6. 가상 머신 목록으로 이동하고 몇 초마다 페이지를 새로 고칩니다. 각 VM에 대한 작업이 병렬로 수행되는지 확인합니다. -Parallel 키워드(keyword) 없었다면 작업은 순차적으로 수행되었을 것입니다. VM은 순차적으로 시작되지만 각 VM은 각 VM의 특성에 따라 약간 다른 시간에 실행 단계에 도달할 수 있습니다.

리소스 정리

이 Runbook을 계속 사용하지 않려면 다음 단계를 수행하여 삭제합니다.

  1. Automation 계정으로 이동합니다.
  2. 프로세스 자동화에서 Runbook을 선택합니다.
  3. Runbook을 선택합니다.
  4. Runbook 개요 페이지에서 삭제를 선택합니다.

다음 단계

이 자습서에서는 PowerShell 워크플로 Runbook을 만들었습니다. Python 3 Runbook을 보려면 다음을 참조하세요.