Azure automation을 이용하여 자동 실행

기업에서는 비용 절감을 위해서 개발환경의 서버는 퇴근 후 끄는 경우가 많습니다.
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가 그랙픽 형태여서 변경이 쉽지 않습니다.

Untitled

그래서 차라리 아예 새로 만드는 것을 어떤가 싶어서 새로 만들어 보았습니다.

$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"

}

}

아래의 그림을 보면 잘 동작하는 것을 알 수 있습니다.

Untitled

Related Posts

대역대가 중복될 경우 AWS DR 적용

이번에 요청 들어온 아키텍처 설계가 상당히 어려웠습니다. 온프레미스와 AWS간 Distaster Recovery (DR) 구성인데 클라이언트가 요청한 조건은 동작하는 서버(Source 서버)가 장애 발생시 생성될 서버(DR서버)의 IP가 Source 서버와 동일한 IP로 만들어지도록 하는 거였습니다.

Read More

데이터베이스 보안 지침

데이터 베이스 서버의 보안 대책 DB 서버의 보안 대책은 크게 5가지로 나눠 생각 할 수 있습니다.

Read More

Azure VPN 정책기반과 경로 기반

온프레미스와 VPN연결을 할때 정책 기반과 경로 기반을 고를 수 있다.(IKev2일 경우)

Read More