由于一些不可描述的原因,在Azure Global部署了几台VM。出于节约的目的,选择了Spot实例方式。但最近发现,这几台VM经常被自动关机并解除资源(Deallocate),需要登录到Azure去开机,于是想到,能否有一个简单的方法,让VM关机后自动开机?
Azure提供了很多自动触发任务的工具,例如Function、LogicApp等,如果只是为了实现自动开机,可以很简单的实现。
设计思路
VM在关机时,会在Activity Log里记录下事件,我们可以使用此事件触发一个Alert Rule,执行Action Group,调用Webhook,去执行开机的Runbook,整个过程如下:
其中Rule是核心,负责接收触发并执行相应操作。下边就看看具体实施。
实施步骤
创建测试的资源
创建资源组和测试VM如下(过程略):
将VM关机待测试:
创建Runbook
在所有服务中查找并创建Automation Accounts:
AutoMation Account支持三种Runbook:图形Runbook、Python2 Runbook、PowerShell Runbook。这里我们创建PowerShell Runbook。
但Automation Account内置的PS模块是AzureRM版本,现在新的已经是Az版本,所以我们要先安装对应模块。这里需要安装两个模块:Az.Accounts(用作登录)、Az.Compute(用作VM管理)。
安装模块有两种方式:
一、直接在Automation Account的Modules gallery搜索响应模块并安装:
但这种方式有个问题,如果模块有依赖性,无法自动安装所依赖的模块。
二、登录PS Gallery库,搜索相关模块并安装:
PS库
这里我们搜索Az.Compute:
点击进入,在Package Details里可以看到,Az.Accouts是其依赖包,所以安装Az.Compute会自动安装Az.Accounts:
点击如下Azure Automation,该模块会自动安装:
选择Deploy Azure Automation:
在弹出窗口选择正确的Azure账户,会列出该账户下的Automation Account:
选择正确的Automation Account,点击OK即可安装:
部署完成,回到Automation Account的Modules,可以按到安装好的模块:
现在到Runbook栏,选择创建Runbook,为Runbook取名,类型为PowerShell:
创建后自动进入Runbook的编辑界面:
输入需要的脚本,分为两个步骤:
1.使用Automation Account的服务主体登录Azure:
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
2.启动VM:Start-AzVM -Name vm01 -ResourceGroupName DemoRG
编辑完成如下:
现在测试Runbook是否可以正常运行,点击Test pane进入测试页面:
点击Start开始运行:
稍待片刻,出现运行结果,如果没有报错,说明运行成功:
回到VM的界面,可以看到之前关机的VM已经成功开机:
测试无误,退回Runbook的编辑界面,并点击发布正式启用该Runbook:
发布成功自动进入Runbook的界面,点击Add webhook创建webhook:
点击创建新的Webhook:
命名并选择过期时间,拷贝URL(URL只会在这里显示一次,一定要记好):
到这步,Runbook的配置和创建完成,下边需要到VM去配置Rule来触发Runbook。
VM Rule配置
回到VM界面,在左侧选择Alerts:
点击New alert rule:
首先点击Select condition选择触发条件,搜索deallocate并选择:
完成后如下:
然后在Action Group选择Action Group:
由于没有现成的Action Group,所以我们新建一个,根据需要取名,并创建一个Action Type选择Webhook:
在URI里输入之前创建Webhook时拷贝的URL:
最后为rule取名并创建:
创建完成后可以在Manager Rule里看到该Rule:
测试
现在测试是否可按规划完成操作。
在VM界面点击关机:
VM正常关机并Deallocate。
稍等一会儿,再刷新VM状态,VM已自动启动:
再查看Runbook的状态,VM关机后自动调用了一次Runbook:
整个自动开机过程触发执行无误。
小结
在谈到IT基础运维时,很多人还把公有云只是作为一个基础的资源提供和目录服务,但相对于从底层开始搭建私有云,公有云提供了很多自动化的运维管理工具,帮助IT运维更好的管理。
这里只是一个最简单自动开机例子,合理的规划流程、触发机制,可以自动完成很多原本的手工操作,希望对大家有所帮助。