다음을 통해 공유


Service Management Automation에서 자식 Runbook

중요

이 버전의 SMA(서비스 관리 자동화)는 지원이 종료되었습니다. SMA 2022로 업그레이드하는 것이 좋습니다.

다른 Runbook에서 사용할 수 있는 불연속 함수를 사용하여 재사용 가능한 모듈식 Runbook을 작성하는 것이 SMA(서비스 관리 자동화)의 모범 사례입니다. 부모 Runbook은 필요한 기능을 수행하기 위해 하나 이상의 자식 Runbook을 호출하는 경우가 많습니다. 자식 Runbook을 호출하는 방법에는 두 가지가 있으며, 각 방법에는 서로 다른 시나리오에 가장 적합한 항목을 결정할 수 있도록 이해해야 하는 고유한 차이점이 있습니다.

인라인 실행을 사용하여 자식 Runbook 호출

다른 runbook에서 runbook 인라인을 호출하려면 runbook의 이름을 사용하고 활동 또는 cmdlet을 사용하는 것처럼 정확하게 해당 매개 변수에 대한 값을 제공합니다. 이러한 방식을 통해 같은 SMA 환경의 모든 Runbook을 다른 Runbook에서 사용할 수 있습니다. 부모 runbook은 다음 줄으로 이동하기 전에 자식 runbook이 완료하기를 기다리고 어떤 출력도 직접 부모에게 반환됩니다.

runbook 인라인을 호출하면 동일한 작업에서 부모 runbook으로 실행됩니다. 실행된 자식 runbook의 작업 기록에는 표시가 없습니다. 자식 runbook에서 모든 예외 및 출력 스트림을 부모와 연결합니다. 이로 인해 작업이 줄어들고 자식 Runbook에서 throw된 예외 및 부모 Runbook 작업과 연결된 모든 스트림 출력 때문에 더 쉽게 추적하고 문제를 해결할 수 있습니다.

Runbook을 게시할 때는 해당 Runbook이 호출하는 모든 자식 Runbook이 이미 게시되어 있어야 합니다. Runbook이 컴파일될 때 Automation이 자식 Runbook과의 연결을 빌드하기 때문입니다. 그렇지 않은 경우 부모 Runbook이 제대로 게시되는 것처럼 보이지만 시작되면 예외가 생성됩니다. 이 경우 자식 runbook을 제대로 참조하기 위해 부모 runbook을 다시 게시할 수 있습니다. 연결이 이미 만들어졌기 때문에 자식 Runbook이 변경된 경우 부모 Runbook을 다시 게시할 필요가 없습니다.

인라인이라는 자식 Runbook의 매개 변수는 복잡한 개체를 포함한 모든 데이터 형식일 수 있으며 관리 포털 또는 Start-SmaRunbook cmdlet을 사용하여 Runbook을 시작할 때와 같이 JSON serialization이 없습니다.

Runbook 형식

Runbook은 인라인 실행을 사용하여 자식 Runbook과 동일한 형식의 다른 Runbook만 사용할 수 있습니다. 즉 , PowerShell 워크플로 Runbook 은 인라인 실행을 사용하여 PowerShell Runbook 을 자식으로 사용할 수 없으며 PowerShell Runbook은 PowerShell 워크플로 Runbook을 사용할 수 없습니다.

인라인 실행을 사용하여 PowerShell 워크플로 자식 Runbook을 호출하는 경우 Runbook의 이름만 사용합니다. PowerShell 자식 Runbook을 호출할 때 스크립트가 로컬 디렉터리에 있는지 지정하려면 이름이 .\ 앞에 와야 합니다.

예제

다음 예제는 세 매개 변수인 복잡한 개체, 정수 및 부울 값을 허용하는 테스트 자식 runbook을 호출합니다. 자식 runbook의 출력을 변수에 할당합니다. 이 경우 자식 Runbook은 PowerShell 워크플로 Runbook입니다.

$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = Test-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true

다음은 PowerShell 스크립트 Runbook을 자식으로 사용하는 동일한 예제입니다.

$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true

cmdlet을 사용하여 자식 Runbook 시작

Start-SMARunbook cmdlet을 사용하여 Windows PowerShell을 통해 Runbook을 시작할 수 있습니다. cmdlet에서 자식 Runbook을 시작하면 해당 자식 Runbook에 대해 작업이 만들어지는 즉시 부모 Runbook이 다음 줄로 이동합니다. Runbook에서 출력을 검색해야 하는 경우 Get-SMAJobOutput을 사용하여 작업에 액세스해야 합니다.

cmdlet으로 시작된 자식 runbook에서 작업은 부모 runbook의 별도 작업에서 실행됩니다. 이로 인해 워크플로 인라인을 호출하는 것보다 더 많은 작업이 발생하므로 작업자 서버의 오버헤드가 증가하고 추적하기가 더 어려워집니다. 부모는 각각이 완료 될 때까지 기다리지 않고 여러 자식 Runbook을 시작할 수 있습니다. 인라인에서 자식 Runbook을 호출하는 동일한 종류의 병렬 실행에 대해 부모 Runbook은 parallel 키워드를 사용해야 합니다.

Runbook 매개 변수에서 설명한 대로 cmdlet으로 시작하는 자식 Runbook의 매개 변수는 해시 테이블로 제공됩니다. Credentials에서 설명하는 것처럼 자격 증명 자산의 이름을 제공할 수는 있지만 단순한 데이터 형식만 사용할 수 있습니다. runbook에 복잡한 데이터 형식을 가진 매개 변수가 있는 경우 인라인으로 호출해야 합니다.

다음 예제에서는 매개 변수를 사용하여 자식 Runbook을 시작한 다음 해당 Runbook이 완료될 때까지 기다립니다. 자식 Runbook이 완료되면 부모 Runbook이 해당 출력을 작업에서 수집합니다.

$webServer = 'https://MyServer'
$port = 9090
$runbookName = "Test-Runbook"
$params = @{"VMName"="MyVM";"RepeatCount"=2;"Restart"=$true}

$job = Start-SmaRunbook -WebServiceEndpoint $webServer -Port $port -Name $runbookName -Parameters $params

$doLoop = $true
While ($doLoop) {
   $job = Get-SmaJob -WebServiceEndpoint $webServer -Port $port -Id $job.Id
   $status = $job.Status
   $doLoop = (($status -ne "Completed") -and ($status -ne "Failed") -and ($status -ne "Suspended") -and ($status -ne "Stopped")
}

Get-SmaJobOutput -WebServiceEndpoint $webServer -Port $port -Id $job.Id -Stream Output

자식 Runbook 호출 방법 비교

다음 테이블은 다른 runbook에서 runbook을 호출하기 위한 두 메서드 간의 차이점을 요약합니다.

인라인 Cmdlet
작업 자식 runbook은 부모와 동일한 작업을 실행합니다. 자식 runbook에 대한 별도 작업을 만듭니다.
실행 계속하기 전에 부모 runbook은 자식 runbook이 완료되기를 기다립니다. 부모 Runbook은 자식 Runbook이 시작된 직후에 실행을 계속합니다.
출력 부모 runbook은 자식 runbook에서 출력을 직접 가져올 수 있습니다. 부모 Runbook은 자식 Runbook 작업의 출력을 검색해야 합니다.
매개 변수 자식 runbook 매개 변수 값은 별도로 지정되며 모든 데이터 형식을 사용할 수 있습니다. 자식 Runbook 매개 변수의 값은 단일 해시 테이블로 결합되어야 하며 JSON serialization을 사용하는 단순, 배열 및 개체 데이터 형식만 포함할 수 있습니다.
게시 부모 runbook을 게시하기 전에 자식 runbook을 게시해야 합니다. 부모 Runbook이 시작되기 전에 언제든지 자식 Runbook을 게시해야 합니다.

다음 단계