Azure Automation에서 AKS의 정시 시작/중지

14214 단어 AzureKubernetesakstech

개시하다


Azure Kubernetes Service에서 구현클러스터 기능 일시 중지되었습니다.이렇게 하면 사용 기간 없이 계산된 비용을 통제할 수 있다.
이 자동화를 고려할 때 Microsoft Tech Community 기사에 참고할 만한 것이 있기 때문에 이를 토대로 AKS에 대응해 봤다.
Auto Stop and Start your Azure Database for MySQL Single Server using PowerShell runbook - Microsoft Tech Community

절차.

  • Azure Automation 계정 생성
  • Az.Accents 모듈 가져오기
  • 새로운 Runbook을 만들고 코드를 등록하고 공개
  • 동작 확인
  • 정시 집행 설정
  • 1. Azure Automation 계정 만들기


    먼저 Azure Automation 계정을 만듭니다.여기 순서.를 따른다면 특별히 주저하지 않을 것이다.

    2. Az.Accents 모듈 가져오기


    스크립트에 Azure 계정 정보를 처리하는 부분이 있기 때문에, Az.Accents 모듈을 가져옵니다.모듈 갤러리Az.Accounts에서 검색하여 가져오면 됩니다.
    Az.Accounts のインポート

    3. 새 Runbook, 코드 등록 및 공개


    Automation 계정에 새 Runbook을 만들면 다음과 같이 붙여넣기 코드를 "저장"}"공개"합니다.(디버깅 기사가 남았지만 이건 필요 없어요.😅)
    
    # Envrionment parameters
    param(
    [parameter(Mandatory=$true)] 
    [string] $subscriptionId,
    
    [parameter(Mandatory=$true)] 
    [string] $resourceGroupName,
    
    [parameter(Mandatory=$true)] 
    [string] $resourceName,
    
    [parameter(Mandatory=$true)] 
    [string] $action
    ) 
     
    filter timestamp {"[$(Get-Date -Format G)]: $_"} 
    
    Write-Output "Script started." | timestamp
    
    # $VerbosePreference = "Continue" ##enable this for verbose logging
    $ErrorActionPreference = "Stop" 
    
    # Authenticate with Azure Automation Run As account (service principal) 
    $connectionName = "AzureRunAsConnection"
    
    Write-Output "debug1" | timestamp
    
    try
    {
        # Get the connection "AzureRunAsConnection"
        $servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
    
        Write-Output "Logging in to Azure..."
        Add-AzAccount `
            -ServicePrincipal `
            -TenantId $servicePrincipalConnection.TenantId `
            -ApplicationId $servicePrincipalConnection.ApplicationId `
            -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint | Out-Null 
    }
    catch {
        if (!$servicePrincipalConnection)
        {
            $ErrorMessage = "Connection $connectionName not found."
            throw $ErrorMessage
        } else{
            Write-Error -Message $_.Exception
            throw $_.Exception
        }
    }
    Write-Output "Authenticated with Automation Run As Account."  | timestamp 
    
    $startTime = Get-Date 
    Write-Output "Azure Automation local time: $startTime." | timestamp 
    
    # Get the authentication token 
    $azContext = Get-AzContext
    $azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
    $profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
    $token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
    $authHeader = @{
        'Content-Type'='application/json'
        'Authorization'='Bearer ' + $token.AccessToken
    }
    Write-Output "Authentication Token acquired." | timestamp 
    
    # Invoke REST API Call based on specified action
    if($action -eq 'stop')
    {
        # Invoke the REST API
        $restUri='https://management.azure.com/subscriptions/' + $subscriptionId + '/resourceGroups/' `
            + $resourceGroupName + '/providers/Microsoft.ContainerService/managedClusters/' `
            + $resourceName + '/'+ $action + '?api-version=2020-09-01'
        $response = Invoke-RestMethod -Uri $restUri -Method POST -Headers $authHeader
        Write-Output "$resourceName is getting stopped." | timestamp 
    }
    else
    {
        # Invoke the REST API
        $restUri='https://management.azure.com/subscriptions/' + $subscriptionId + '/resourceGroups/' `
            + $resourceGroupName + '/providers/Microsoft.ContainerService/managedClusters/' `
            + $resourceName + '/'+ $action + '?api-version=2020-09-01'
        $response = Invoke-RestMethod -Uri $restUri -Method POST -Headers $authHeader
        Write-Output "$resourceName is Starting." | timestamp 
    }
    
    Write-Output "Script finished." | timestamp
    
    편집 중인 화면은 이런 느낌이다.
    Azure Automation にコードを記載

    4. 동작 확인


    Runbook에 필요한 매개 변수를 전달하여 실행하기만 하면 됩니다.
    Runbook の実行
    내보내기를 통해 실행 로그를 확인할 수 있습니다.
    実行結果の確認
    AKS 측의 선처 여부는 클라우드셸 등을 통해 확인할 수 있다.
    $ az aks show --resource-group XXXXX --name XXXXX
    
    ....
      
      "powerState": {
        "code": "Running"
      },
      "privateFqdn": null,
      "provisioningState": "Succeeded",
    

    5. 설정 정시 실행


    시한부 설정은 Automation 화면에서 링크 스케줄을 클릭하여 설정합니다.매개 변수의 지정 등도 이곳에서 진행할 수 있다.자세한 내용은 처음 문장과이 문서를 참조하십시오.

    끝말


    46시에 시작해야 하는 AKS에는 적용되지 않지만, 용도 검증 등의 이유로 일부 시간대는 떨어뜨리려는 경우에도 활용할 수 있다고 생각한다.가능하면 참고하여 사용하세요.

    좋은 웹페이지 즐겨찾기