Azure automation을 이용하여 자동 실행
- Azure
- March 6, 2022
기업에서는 비용 절감을 위해서 개발환경의 서버는 퇴근 후 끄는 경우가 많습니다.
Azure는 편의성을 위해 VM은 자동 종료 서비스를 UI로 지원해줍니다 하지만 자동 실행 서비스는 없어서 자동화 파이프라인을 만들어야 합니다.
Automatically Start/Stop Azure Windows virtual machines (Azure automation)
Azure는 runbook gallery가 많이 활성화 되어 있습니다. 일종의 aws의 람다로 치면 공개된 템플릿 같은것으로 보입니다.
다행히도 Window microsoft 에서 start runbook gallery을 제공해 줍니다. 하지만 오래전 runbook이여서 바로 적용하지는 어렵습니다.
갤러리에서 Azure 리소스를 조절할때 쓰는 모듈은 AzureRM으로 2024년이후로는 종료되는 파워셀 모듈이므로 Az로 모듈을 변경해야 합니다.
여기서 또 하나의 문제가 발생하는데 Azure가 제공한는 gallery가 그랙픽 형태여서 변경이 쉽지 않습니다.
그래서 차라리 아예 새로 만드는 것을 어떤가 싶어서 새로 만들어 보았습니다.
$connectionName = "AzureRunAsConnection"
try{
#Getting the service principal connection "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -name $connectionName
"Logging into Azure..."
Connect-AzAccount -ServicePrincipal -TenantID $servicePrincipalConnection.TenantID -ApplicationID $servicePrincipalConnection.ApplicationID -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch{
if(!$servicePrincipalConnection){
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
}else {
Write-Error -Message $_.Exception
throw $_.Exception
}
}
if($err) {
throw $err
}
$resourceGroupName = "{리소스 그룹}"
# Get VMs with snapshot tag
$tagResList = Get-AzResource -TagName "AutoStart" -TagValue "True" | foreach {
Get-AzResource -ResourceId $_.resourceid
}
foreach($tagRes in $tagResList) {
if($tagRes.ResourceId -match "Microsoft.Compute"){
$vmInfo = Get-AzVM -ResourceGroupName $tagRes.ResourceId.Split("/")[4] -Name $tagRes.ResourceId.Split("/")[8] -Status
if ($vmInfo.Statuses[1].DisplayStatus -ne "Vm running"){
Start-AzVM -ResourceGroupName $resourceGroupName -Name $vmInfo.Name
$vmInfo.Name + " is starting"
}
else{
$vmInfo.Name + " is already running.Therefore don't need to take strating"
}
}
else{
$tagRes.ResourceId + " is not a compute instance"
}
}
아래의 그림을 보면 잘 동작하는 것을 알 수 있습니다.