Azure 기능을 사용하여 가상 머신 켜기 또는 끄기

Azure 함수란?


Azure Functions는 어플리케이션을 실행하는 데 필요한 모든 업데이트된 인프라 및 리소스를 제공하는 클라우드 서비스입니다.너는 너에게 가장 중요한 코드 세션에 집중하고, 함수는 나머지 부분을 처리한다.함수는 Azure에 대해 서버 없는 계산을 제공합니다.함수를 사용하여 웹 API를 구축하고 데이터베이스 변경에 응답하며 사물인터넷 흐름을 처리하고 메시지 대기열을 관리할 수 있습니다.
Azure 기능에 대한 자세한 내용은 Microsoft Documentation를 참조하십시오.

Azure 함수를 사용하여 Azure VM의 전원 상태를 제어하는 방법


오늘 PowerShell Core를 코드 라이브러리로 사용하여 HTTP 트리거를 통해 기능 응용 프로그램에 URL 요청을 전달하여 가상 기기의 전원 상태를 확인하거나 가상 기기를 정지/시작할 수 있는 기능 응용 프로그램을 만드는 방법을 소개합니다.
모든 것을 준비하기 위해 Powershell 콘솔에서 Azure CLI를 사용합니다.먼저 다음 명령을 실행하여 Azure에 로그인합니다.
az login
다음 명령을 실행하여 resource group, storage account, app service planfunction app를 생성합니다.
# Function app and storage account names must be unique.
$randomInt = Get-Random -Maximum 9999
$resourceGroupName = "VmPowerFunction"
$storageName = "vmpowersa$randomInt"
$functionAppName = "vmpowerfunc$randomInt"
$region = "uksouth"

# Create a resource resourceGroupName
az group create --name "$resourceGroupName" --location "$region"

# Create an azure storage account
az storage account create `
    --name "$storageName" `
    --location "$region" `
    --resource-group "$resourceGroupName" `
    --sku "Standard_LRS" `
    --kind "StorageV2"

# Create a Function App
az functionapp create `
    --name "$functionAppName" `
    --storage-account "$storageName" `
    --consumption-plan-location "$region" `
    --resource-group "$resourceGroupName" `
    --os-type "Windows" `
    --runtime "powershell" `
    --runtime-version "7.0" `
    --functions-version "3"
주의: 본 강좌에서 우리는 Consumption 응용 프로그램 서비스 계획을 사용하는데 dedicated premium 계획이 아니다.그러나 필요하면 계획을 변경할 수 있습니다. 왜냐하면 우리가 소비 계획을 사용하기 시작하면 시작하는 데 시간이 좀 걸릴 수 있기 때문입니다.그러나 본 강좌와 용례에서 이 계획은 우리의 기능에 있어서 이미 충분하다.
다음에 우리는 system assigned managed identity 를 사용하여 함수 응용 프로그램을 사용할 것이다. 그러면 우리는 우리가 유지하고자 하는 가상 기기에 대해 우리의 함수 응용 프로그램을 허가할 수 있다.기능 어플리케이션settings 창에서 Identity를 선택하고 system assigned 설정을 ON로 설정하고 저장합니다.

이제 호스팅 ID를 작성하면 가상 머신이 있는 구독 또는 리소스 그룹에 역할 할당 및 권한(IAM)을 추가할 수 있습니다.또한 기능 어플리케이션에 역할Virtual Machine Contributor을 부여합니다. 어플리케이션이 가상 머신의 상태를 확인하고 가상 머신을 정지하거나 시작할 수 있는 능력만을 원하기 때문입니다.우리가 설정한 settings 같은 identity 창에서 Permissions 라는 새 설정을 볼 수 있습니다.Azure Role Assignments를 클릭하고 VM이 있는 리소스 그룹 범위 내에서 관련 권한을 추가합니다.
주의: IAM 필요한 범위 (예를 들어 관리팀이나 구독 범위) 에서 역할 분배 권한을 추가할 수 있습니다.


역할이 할당된 범위 내에서 권한IAM을 확인하면 기능 응용 프로그램IAM 권한이 표시됩니다.

현재, 우리는 파워셸 코드와 트리거 설정 함수 프로그램을 사용하여 해결 방안을 최종적으로 확정할 것입니다.Functions 창에서 다음 설정이 있는 Add을 클릭합니다.

개발 환경: Develop in portal템플릿 선택: (67914)
새로운 기능: HTTP trigger인증 수준: VmPowerState다음 powershell 코드는 Function에서 복사됩니다.
#// code/vmPowerFunction.ps1

using namespace System.Net

# Input bindings are passed in via param block.
param($request, $TriggerMetadata)

#Set default value
$status = 200

Try{
    # Write to the Azure Functions log stream.
    Write-Output "PowerShell HTTP trigger function processed a request."

    # Interact with query parameters or the body of the request.
    Write-Output ($request | ConvertTo-Json -depth 99)

    $ResourceGroupName = $request.query.ResourceGroupName
    $VMName = $request.query.VMName
    $Context =  $request.query.Context
    $Action = $request.query.Action

    $null = Connect-AzAccount -Identity
    $null = Set-AzContext $Context

    $vmStatus = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $VMName -Status
    Write-output $vmStatus
    If(-not ($vmStatus)){
        $status = 404
        Throw "ERROR! VM [$VMName] not found. Please check if the 'Subscription ID', 'Resource Group Name' or 'VM name' is correct and exists."
    }
    [string]$Message = "Virtual machine [$VMName] status: " + $vmStatus.statuses[-1].displayStatus
    Switch($Action){
        'start'{
            If($vmStatus.statuses[-1].displayStatus -ne 'VM running'){
                Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VMName -Verbose
                [string]$message += '... Virtual machine is now starting'
            }
            Else{
                [string]$message += '... Virtual machine is already running'
            }
        }
        'stop'{
            If($vmStatus.statuses[-1].displayStatus -ne 'VM deallocated'){
                Stop-AzVM -ResourceGroupName $ResourceGroupName -Name $VMName -Force -Verbose
                [string]$message += '... Virtual machine is stopping'
            }
            Else{
                [string]$message += '... Virtual machine is already deallocated'
            }
        }
        'status'{
            [string]$message
        }
        default{
            [string]$message += ". $($request.query.action) is outside of the allowed actions. Only allowed actions are: 'start', 'stop', 'status'"
            $status = 400
        }
    }
}
Catch{
    [string]$message += $_
}

Write-output $message

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value (
    [HttpResponseContext]@{
        StatusCode = $status
        body = [string]$message
        headers = @{ "content-type" = "text/plain" }
    }
)
여기에 Link의 기능 코드가 하나 더 있다.
기본적으로 기능 응용 프로그램에서는 AZ 모듈을 사용할 수 없으므로 다음에는 기능 응용 프로그램Code + Test으로 이동하여 AZ 모듈을 활성화하여 사용할 수 있습니다.diagnostic console 창으로 이동하여 Development Tools를 선택합니다.

그런 다음 Advanced Tools로 이동하여 site -> wwwroot 파일을 편집하여 AZ 모듈을 활성화합니다.

주의: 변경한 후에 함수 프로그램을 다시 시작해야 합니다.
그런 다음 프록시 URL을 만들어 복제requirements.psd1합니다.

다시 Get function URL 창으로 이동하여 Functions을 선택한 다음 다음 다음 설정을 사용하여 선택Proxies합니다.

이름: Add경로 템플릿: PowerAction허용되는 HTTP 방법: /{Action}/{Context}/{ResourceGroupName}/{VMName}백엔드 URL: GET덮어쓰기 요청
HTTP 방법: <function URL>다음 질의 매개변수를 추가합니다.
성함
가치관
행동
{조치}
배경.
{Context}
ResourceGroupName
{ResourceGroupName}
VMName
{VMName}
현재 우리는 일반적인 웹 브라우저를 사용하여 우리의 응용 프로그램의 기능을 테스트할 수 있다.방금 만든 프록시 URLPOST을 웹 브라우저에 복사하고 다음 매개 변수로 질의 매개 변수를 대체합니다.https://functionappname.azurewebsites.net/{Action}/{Context}/{ResourceGroupName}/{VMName} = 이 값은 Action, stop 또는 start일 수 있습니다.status = 이 값은 가상 머신이 있는 가입 ID이고 우리의 기능 응용 프로그램 표지에 권한이 있어야 합니다.Context = 이 값은 가상 머신이 있는 리소스 그룹의 이름이어야 합니다.ResourceGroupName = 작업을 수행할 VM의 이름입니다.
예를 들어, 가상 머신VMNameStatus를 확인하려면 브라우저에 다음을 입력할 수 있습니다.MyWebServer01VMhttps://functionappname.azurewebsites.net/status/259b6576-0000-0000-0000-000000000000/ResourceGroup223/MyWebServer01을 중지하고 할당을 취소하려면 MyWevServer01 매개변수를 {Action}로 변경합니다.Stop마찬가지로 https://functionappname.azurewebsites.net/stop/259b6576-0000-0000-0000-000000000000/ResourceGroup223/MyWebServer01{Action}로 변경하여 VM을 시작할 수도 있습니다.

보호 기능 어플리케이션


본 강좌의 목적에서, 상태를 검사하고, 가상 기기를 정지하고, 시작하는 데 사용되는 프록시 URL은 함수 app URL, 구독 ID, 자원 그룹 이름, 가상 기기의 이름을 아는 모든 사람이 실행할 수 있음을 주의하십시오.함수 프로그램을 보호하기 위해 그 중 일부 Function App Security recommendationsSecuring Azure Functions 를 따르는 것을 권장합니다.
Google URL에 대한 접근을 제한하는 가장 빠른 방법은 특정 IP나 일련의 IP만 Google URL에 접근할 수 있도록 하는 것입니다.
기능 응용프로그램Start 창으로 이동하여 settings:

다음Networking을 선택하고 IP 허용 규칙을 추가합니다.

기본적으로 이 기능은 프록시 URL에 대한 모든 인바운드 연결을 차단하며 IP를 제외합니다.현재 다른 사용자가 이 기능에 접근하려고 시도하면 접근할 수 없습니다.

나는 네가 이 게시물을 좋아하고 새로운 것을 배웠으면 한다.제 Github 페이지에서 본문에 사용된 코드 예시를 찾을 수 있습니다.❤️

작자


예를 들어 공유하고 나와 함께 가자.🐙 GitHub | 🐧 | 👾
.ltag__user__id__620034.작업 따르기 버튼
배경색: #0cb58!중요
색상: #000000!중요
테두리 색상: #0cb58!중요
}

마르셀.따르다


Cloud Solutions & DevOps Architect.

좋은 웹페이지 즐겨찾기