튜토리얼: Azure Functions를 사용하여 사전 및 사후 이벤트 생성
적용 대상: ✔️ Windows VM ✔️ Linux VM ✔️ 온-프레미스 환경 ✔️ Azure VM ✔️ Azure Arc 지원 서버.
이 자습서에서는 Azure Functions를 사용하여 패치 예약 워크플로에서 VM을 시작 및 중지하기 위한 사전 및 사후 이벤트를 만드는 방법을 설명합니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- 필수 조건
- 함수 앱 만들기
- 함수 만들기
- 이벤트 구독 만들기
필수 조건
PowerShell 7.2 Runbook을 사용하고 있는지 확인합니다.
관리 ID에 권한 할당 - 적절한 관리 ID에 권한을 할당할 수 있습니다. Runbook은 Automation 계정의 시스템이 할당한 관리 ID 또는 사용자가 할당한 관리 ID를 사용할 수 있습니다.
포털 또는 PowerShell cmdlet을 사용하여 각 ID에 권한을 할당할 수 있습니다.
권한을 할당하려면 Azure Portal을 사용하여 Azure 역할 할당의 단계를 따릅니다.
Az.ResourceGraph
모듈을 가져오고 모듈이 모듈 버전 2.0.3을 사용하여 ThreadJob으로 업데이트되었는지 확인합니다.
함수 앱 만들기
함수 앱 만들기 단계를 따릅니다.
함수 앱을 만든 후 리소스로 이동하고 다음 단계에 따라 종속성을 로드하는지 확인합니다.
참고 항목
처음으로 종속성을 로드해야 합니다. PowerShell 종속성이 로드되지 않는 경우 최신 버전의 AZ 및 AZ를 확인합니다. ResourceGraph.
함수 앱에서 앱 파일을 선택합니다.
host.json에서 ManagedDependecy를 True로 설정하고 requirments.psd1을 선택합니다.
requirements.psd1 아래에 다음 코드를 붙여넣습니다.
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }
저장을 선택합니다.
개요 탭에서 함수 앱을 다시 시작하여 requirments.psd1 파일에 작성된 종속성을 로드합니다.
함수 만들기
함수 앱을 만든 후 리소스로 이동하고 개요에서 Azure Portal에서 만들기를 선택합니다.
함수 만들기 창에서 다음을 선택합니다.
이벤트 그리드 함수의 왼쪽 메뉴에서 코드+테스트를 선택하고 다음 코드를 붙여넣은 후 저장을 선택합니다.
# Make sure that we are using eventGridEvent for parameter binding in Azure function. param($eventGridEvent, $TriggerMetadata) Connect-AzAccount -Identity # Install the Resource Graph module from PowerShell Gallery # Install-Module -Name Az.ResourceGraph $maintenanceRunId = $eventGridEvent.data.CorrelationId $resourceSubscriptionIds = $eventGridEvent.data.ResourceSubscriptionIds if ($resourceSubscriptionIds.Count -eq 0) { Write-Output "Resource subscriptions are not present." break } Write-Output "Querying ARG to get machine details [MaintenanceRunId=$maintenanceRunId][ResourceSubscriptionIdsCount=$($resourceSubscriptionIds.Count)]" $argQuery = @" maintenanceresources | where type =~ 'microsoft.maintenance/applyupdates' | where properties.correlationId =~ '$($maintenanceRunId)' | where id has '/providers/microsoft.compute/virtualmachines/' | project id, resourceId = tostring(properties.resourceId) | order by id asc "@ Write-Output "Arg Query Used: $argQuery" $allMachines = [System.Collections.ArrayList]@() $skipToken = $null do { $res = Search-AzGraph -Query $argQuery -First 1000 -SkipToken $skipToken -Subscription $resourceSubscriptionIds $skipToken = $res.SkipToken $allMachines.AddRange($res.Data) } while ($skipToken -ne $null -and $skipToken.Length -ne 0) if ($allMachines.Count -eq 0) { Write-Output "No Machines were found." break } $jobIDs= New-Object System.Collections.Generic.List[System.Object] $startableStates = "stopped" , "stopping", "deallocated", "deallocating" $allMachines | ForEach-Object { $vmId = $_.resourceId $split = $vmId -split "/"; $subscriptionId = $split[2]; $rg = $split[4]; $name = $split[8]; Write-Output ("Subscription Id: " + $subscriptionId) $mute = Set-AzContext -Subscription $subscriptionId $vm = Get-AzVM -ResourceGroupName $rg -Name $name -Status -DefaultProfile $mute $state = ($vm.Statuses[1].DisplayStatus -split " ")[1] if($state -in $startableStates) { Write-Output "Starting '$($name)' ..." $newJob = Start-ThreadJob -ScriptBlock { param($resource, $vmname, $sub) $context = Set-AzContext -Subscription $sub; Start-AzVM -ResourceGroupName $resource -Name $vmname -DefaultProfile $context} -ArgumentList $rg, $name, $subscriptionId $jobIDs.Add($newJob.Id) } else { Write-Output ($name + ": no action taken. State: " + $state) } } $jobsList = $jobIDs.ToArray() if ($jobsList) { Write-Output "Waiting for machines to finish starting..." Wait-Job -Id $jobsList } foreach($id in $jobsList) { $job = Get-Job -Id $id if ($job.Error) { Write-Output $job.Error } }
왼쪽 메뉴에서 통합을 선택하고 트리거에서 이벤트 트리거 매개 변수 이름을 편집합니다. 코드+테스트 창에 제공된 것과 동일한 매개 변수 이름을 사용합니다. 이 예에서 매개 변수는 eventGridEvent입니다.
저장을 선택합니다.
이벤트 구독 만들기
- Azure Portal에 로그인하고 Azure 업데이트 관리자로 이동합니다.
- 관리에서 컴퓨터, 유지 관리 구성을 선택합니다.
- 유지 관리 구성 페이지에서 구성을 선택합니다.
- 설정에서 이벤트를 선택합니다.
- 사전/사후 유지 관리 이벤트를 만들려면 +이벤트 구독을 선택합니다.
- 이벤트 구독 만들기 페이지에서 다음 세부 정보를 입력합니다.
- 이벤트 구독 세부 정보 섹션에 적절한 이름을 입력합니다.
- 스키마를 Event Grid 스키마로 유지합니다.
- 이벤트 유형 섹션에서 이벤트 유형으로 필터링합니다.
- 사전 이벤트를 보려면 사전 유지 관리 이벤트를 선택합니다.
- 엔드포인트 세부 정보 섹션에서 Azure Function 엔드포인트를 선택하고 구성 및 엔드포인트를 선택합니다.
- 이벤트를 트리거하려면 리소스 그룹, 함수 앱과 같은 적절한 세부 정보를 제공합니다.
- 사후 이벤트를 보려면 사후 유지 관리 이벤트를 선택합니다.
- 엔드포인트 세부 정보 섹션에서 Azure Function 엔드포인트를 선택하고 구성 및 엔드포인트를 선택합니다.
- 이벤트를 트리거하려면 리소스 그룹, 함수 앱과 같은 적절한 세부 정보를 제공합니다.
- 사전 이벤트를 보려면 사전 유지 관리 이벤트를 선택합니다.
- 만들기를 실행합니다.
Azure Storage 계정과 이벤트 허브를 사용하여 이벤트를 저장하고 보내고 받을 수도 있습니다. 이벤트 허브를 만드는 방법 및 스토리지 큐에 대해 자세히 알아봅니다.
다음 단계
- Azure 업데이트 관리자의 사전 및 사후 이벤트의 개요에 대해 자세히 알아봅니다.
- 사전 및 사후 이벤트를 만드는 방법에 대해 자세히 알아보기
- 사전 및 사후 이벤트를 관리하는 방법이나 일정 실행을 취소하는 방법을 알아보려면 사전 및 사후 유지 관리 구성 이벤트를 참조하세요.
- Automation으로 웹후크를 사용하여 사전 및 사후 이벤트 생성에 대해 자세히 알아봅니다.