Azure Automation Account를 사용하면 특정 시간에 특정 PowerShell Script를 실행할 수 있습니다.
어쩌다보니, 특정 VM의 Data Disk Snapshot을 새벽에 생성해야 할 일이 있어서 Automation Account를 사용했습니다.
테스트 시나리오
Azure Automation을 사용하여 Test-VM의 4개의 Data Disk의 Snapshot을 새벽 1시 50분에 생성합니다.
1. Automation Accout 생성
Automation Account - +Add
Name : 원하는 이름 입력
Location : VM이 위치한 지역
Create Azure Run As account : Yes
*참고 - Run As account Create Azure Run As account를 Yes로 설정하면, Azure Active Directory에 App Registration (Service principal)이 생성되고, 구독에 대한 Contributor로 자동으로 등록된다. |
Automation Account 생성 완료
2. 필요한 Powershell 모듈 가져오기 (AzureRm.Compute)
Disk Snapshot을 생성하는 스크립트를 Automation Account에서 사용하여 위해서는 필요한 PowerShell 모듈을 가져오기 해야 합니다..
Snapshot을 생성하기 위해서는 AzureRm.Compute 모듈의 New-AzureRMSnapshotConfig, New-AzureRMSnapshot 명령을 사용합니다.
Automation Account의 AzureRm.Compute 모듈을 확인해보면 Snapshot에 필요한 명령이 보이지 않습니다.
AzureRm.Compute 모듈 가져오기 (Import)
Automation Account - Module gallery 에서 "AzureRm.Compute" 검색하고 AzureRm.Compute 모듈을 선택합니다.
Import를 클릭하고 I agree to update all of the Azure modules에 체크하고 [OK] 버튼을 클릭합니다.
*[OK] 버튼을 클릭해도 알람으로 표시되는 것이 없기 때문에 Import가 안 된 것으로 착각할 수도 있습니다. Backgroupd 작업으로 Import가 진행 중이므로 다시 Import를 누르지 말고, Automation Account 첫 화면으로 돌아갑니다.
Modules 를 클릭해보면 "Azure modules are being updated" 라고 표시되는 것을 확인할 수 있으며, 관련된 모듈들이 Import 되고 있는 중인 것을 확인 할 수 있습니다.
가져오기가 완료되면 "Azure modules have been updated" 라고 표시됩니다.
*Azure 모듈이 Failed로 표시될 수도 있습니다. Azure 모듈이 Failed로 표시되는 이유는 알 수 없지만, Snapshot을 생성 작업에는 영향이 없습니다.
AzureRm.Compute 모듈에 Snapshot 관련 명령이 포함된 것을 확인할 수 있습니다.
3. Runbook 생성
Azure Automation Account에서 PowerShell Script를 실행하기 위해서는 Runbook을 생성해야 합니다.
Automation Account - Runbooks - +Create a runbook
Name : 원하는 이름 입력
Runbook type : PowerShell
[Create]
PowerShell Script를 붙여 넣고 Save 합니다. (변수들은 상황에 맞게 수정해야 합니다.)
# Ensures you do not inherit an AzContext in your runbook Disable-AzureRMContextAutosave –Scope Process $connection = Get-AutomationConnection -Name AzureRunAsConnection # Wrap authentication in retry logic for transient network failures $logonAttempt = 0 while(!($connectionResult) -and ($logonAttempt -le 10)) { $LogonAttempt++ # Logging in to Azure... $connectionResult = Connect-AzureRMAccount ` -ServicePrincipal ` -Tenant $connection.TenantID ` -ApplicationId $connection.ApplicationID ` -CertificateThumbprint $connection.CertificateThumbprint Start-Sleep -Seconds 30 } $AzureContext = Get-AzureRMSubscription -SubscriptionId $connection.SubscriptionID $snapshotResourceGroup = "Test-VM-RG" $snapshotType = "Standard_LRS" $location = "koreacentral" $datePrefix = Get-Date -Format yyyyMMddHHmm for ( $i=21; $i -le 24; $i++) { $diskName = "Test-VM_DATA" + $i $diskURI = "/subscriptions/subscriptionID/resourceGroups/Test-VM-RG/providers/Microsoft.Compute/disks/" + $diskName $snapshotName = $diskName + "-SNAPSHOT-" + $datePrefix $snapshotDATA = New-AzureRMSnapshotConfig -SkuName $snapshotType -Location $location -SourceUri $diskURI -CreateOption Copy New-AzureRMSnapshot -ResourceGroupName $snapshotResourceGroup -SnapshotName $snapshotName -Snapshot $snapshotDATA -AsJob } |
*참고 - Test Test pane에서 Script가 정상 동작하는지 테스트 해 볼 수도 있습니다. Test pane에서 Script를 실행하면 실제로 VM에 영향을 줄 수도 있습니다. 예를 들어, Test pane에서 스크립트를 실행하면, 실제로 Disk Snapshot이 생성됩니다. |
Publish
[Yes]
4. Schedule (예약)
특정 시간에 Runbook이 실행되도록 Schedule을 등록합니다.
대상 Runbook - Schedules - +Add a schedule
Schedule - Create a new schedule - Script 실행 시간 설정 - [Create] - [OK]
*Recurrence 옵션을 사용하면 Runbook을 반복적으로 실행할 수도 있습니다.
Schedule 등록 완료
5. 결과 확인
Runbook의 jobs에서 Script 실행 결과를 확인할 수 있습니다.
실제로 Snapshot이 생성되었습니다.
-끝-
'Microsoft > Azure' 카테고리의 다른 글
Azure에서 도메인 구매 (App Service Domain) (0) | 2021.04.03 |
---|---|
Azure Firewall의 SNAT Private IP 주소 범위 (0) | 2021.02.06 |
Azure VM Extension (가상머신 확장) (0) | 2021.01.30 |
온프레미스에서 Azure Private DNS 사용 (0) | 2020.12.12 |
Azure VMSS의 Load Balancer를 Application Gateway로 변경 (0) | 2020.12.10 |