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
절차.
1. Azure Automation 계정 만들기
먼저 Azure Automation 계정을 만듭니다.여기 순서.를 따른다면 특별히 주저하지 않을 것이다.
2. Az.Accents 모듈 가져오기
스크립트에 Azure 계정 정보를 처리하는 부분이 있기 때문에, Az.Accents 모듈을 가져옵니다.모듈 갤러리
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
편집 중인 화면은 이런 느낌이다.4. 동작 확인
Runbook에 필요한 매개 변수를 전달하여 실행하기만 하면 됩니다.
내보내기를 통해 실행 로그를 확인할 수 있습니다.
AKS 측의 선처 여부는 클라우드셸 등을 통해 확인할 수 있다.
$ az aks show --resource-group XXXXX --name XXXXX
....
"powerState": {
"code": "Running"
},
"privateFqdn": null,
"provisioningState": "Succeeded",
5. 설정 정시 실행
시한부 설정은 Automation 화면에서 링크 스케줄을 클릭하여 설정합니다.매개 변수의 지정 등도 이곳에서 진행할 수 있다.자세한 내용은 처음 문장과이 문서를 참조하십시오.
끝말
46시에 시작해야 하는 AKS에는 적용되지 않지만, 용도 검증 등의 이유로 일부 시간대는 떨어뜨리려는 경우에도 활용할 수 있다고 생각한다.가능하면 참고하여 사용하세요.
Reference
이 문제에 관하여(Azure Automation에서 AKS의 정시 시작/중지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/08thse/articles/04-auto-start-aks-by-azure-runbook텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)