서비스 관리 자동화의 자식 Runbook
다른 Runbook에서 사용할 수 있는 불연속 함수를 사용하여 재사용 가능한 모듈식 Runbook을 작성하는 것이 SMA(서비스 관리 자동화)의 모범 사례입니다. 부모 Runbook은 필요한 기능을 수행하기 위해 하나 이상의 자식 Runbook을 호출하는 경우가 많습니다. 자식 Runbook을 호출하는 방법에는 두 가지가 있으며, 각 방법에는 서로 다른 시나리오에 가장 적합한 항목을 결정할 수 있도록 이해해야 하는 고유한 차이점이 있습니다.
인라인 실행을 사용하여 자식 Runbook 호출
다른 Runbook에서 인라인으로 Runbook을 호출하려면 활동이나 cmdlet을 사용할 때와 정확히 일치하는 방식으로 Runbook 이름을 사용하고 해당 매개 변수의 값을 제공합니다. 동일한 SMA 환경의 모든 Runbook은 다른 모든 Runbook에서 이러한 방식으로 사용할 수 있습니다. 부모 Runbook은 자식 Runbook의 실행이 완료될 때까지 기다린 후에 다음 줄로 이동하며 출력은 부모로 직접 반환됩니다.
인라인으로 호출하는 Runbook은 부모 Runbook과 같은 작업에서 실행됩니다. 따라서 부모 Runbook이 실행한 자식 Runbook의 작업 기록은 표시되지 않습니다. 자식 runbook에서 모든 예외 및 출력 스트림을 부모와 연결합니다. 이렇게 하면 작업이 줄어들고 자식 Runbook 및 부모 Runbook 작업과 연결된 모든 스트림 출력에서 throw된 모든 예외가 발생하므로 더 쉽게 추적하고 문제를 해결할 수 있습니다.
Runbook을 게시할 때는 해당 Runbook이 호출하는 모든 자식 Runbook이 이미 게시되어 있어야 합니다. Automation은 Runbook이 컴파일될 때 모든 자식 Runbook과의 연결을 빌드하기 때문입니다. 그렇지 않은 경우 부모 Runbook이 제대로 게시되는 것처럼 보이지만 시작되면 예외가 생성됩니다. 이러한 현상이 발생하는 경우 부모 Runbook을 다시 게시하여 자식 Runbook을 올바르게 참조하면 됩니다. 연결이 이미 만들어졌기 때문에 자식 Runbook이 변경된 경우에는 부모 Runbook을 다시 게시할 필요가 없습니다.
인라인이라고 하는 자식 Runbook의 매개 변수는 복잡한 개체를 비롯한 모든 데이터 형식일 수 있으며 관리 포털 또는 Start-SmaRunbook cmdlet을 사용하여 Runbook을 시작할 때와 같이 JSON 직렬화가 없습니다.
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을 인라인으로 호출하는 동일한 유형의 병렬 실행에서는 부모 Runbook이 병렬 키워드를 사용해야 합니다.
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을 게시해야 합니다. |
다음 단계
- 자동화 Runbook에 대해 알아봅니다.