工具巧上手,运维自动化

  由于一些不可描述的原因,在Azure Global部署了几台VM。出于节约的目的,选择了Spot实例方式。但最近发现,这几台VM经常被自动关机并解除资源(Deallocate),需要登录到Azure去开机,于是想到,能否有一个简单的方法,让VM关机后自动开机?
  Azure提供了很多自动触发任务的工具,例如Function、LogicApp等,如果只是为了实现自动开机,可以很简单的实现。

设计思路

  VM在关机时,会在Activity Log里记录下事件,我们可以使用此事件触发一个Alert Rule,执行Action Group,调用Webhook,去执行开机的Runbook,整个过程如下:

  其中Rule是核心,负责接收触发并执行相应操作。下边就看看具体实施。

实施步骤

创建测试的资源

  创建资源组和测试VM如下(过程略):
-w1381

  将VM关机待测试:
-w1326

创建Runbook

  在所有服务中查找并创建Automation Accounts:
-w430

  AutoMation Account支持三种Runbook:图形Runbook、Python2 Runbook、PowerShell Runbook。这里我们创建PowerShell Runbook。
  但Automation Account内置的PS模块是AzureRM版本,现在新的已经是Az版本,所以我们要先安装对应模块。这里需要安装两个模块:Az.Accounts(用作登录)、Az.Compute(用作VM管理)。
  安装模块有两种方式:
  一、直接在Automation Account的Modules gallery搜索响应模块并安装:
-w1261

  但这种方式有个问题,如果模块有依赖性,无法自动安装所依赖的模块。
  二、登录PS Gallery库,搜索相关模块并安装:
PS库
  这里我们搜索Az.Compute:
-w1034

  点击进入,在Package Details里可以看到,Az.Accouts是其依赖包,所以安装Az.Compute会自动安装Az.Accounts:
-w890

  点击如下Azure Automation,该模块会自动安装:
-w1032

  选择Deploy Azure Automation:
-w1067

  在弹出窗口选择正确的Azure账户,会列出该账户下的Automation Account:
-w568

  选择正确的Automation Account,点击OK即可安装:
-w327

  部署完成,回到Automation Account的Modules,可以按到安装好的模块:
-w1326

  现在到Runbook栏,选择创建Runbook,为Runbook取名,类型为PowerShell:
-w1425

  创建后自动进入Runbook的编辑界面:
-w733

  输入需要的脚本,分为两个步骤:
  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
  编辑完成如下:
-w1380

  现在测试Runbook是否可以正常运行,点击Test pane进入测试页面:
-w966

  点击Start开始运行:
-w1010

  稍待片刻,出现运行结果,如果没有报错,说明运行成功:
-w1273

  回到VM的界面,可以看到之前关机的VM已经成功开机:
-w1305

  测试无误,退回Runbook的编辑界面,并点击发布正式启用该Runbook:
-w1409

  发布成功自动进入Runbook的界面,点击Add webhook创建webhook:
-w1280

  点击创建新的Webhook:
-w450

  命名并选择过期时间,拷贝URL(URL只会在这里显示一次,一定要记好):
-w461

  到这步,Runbook的配置和创建完成,下边需要到VM去配置Rule来触发Runbook。

VM Rule配置

  回到VM界面,在左侧选择Alerts:
-w1424

  点击New alert rule:
-w1360

  首先点击Select condition选择触发条件,搜索deallocate并选择:
-w1417

  完成后如下:
-w1278

  然后在Action Group选择Action Group:
-w1414

  由于没有现成的Action Group,所以我们新建一个,根据需要取名,并创建一个Action Type选择Webhook:
-w884

  在URI里输入之前创建Webhook时拷贝的URL:
-w1411

  最后为rule取名并创建:
-w1119

  创建完成后可以在Manager Rule里看到该Rule:
-w1426

测试

  现在测试是否可按规划完成操作。
  在VM界面点击关机:
-w1431

  VM正常关机并Deallocate。
  稍等一会儿,再刷新VM状态,VM已自动启动:
-w1328

  再查看Runbook的状态,VM关机后自动调用了一次Runbook:
-w1247

  整个自动开机过程触发执行无误。

小结

  在谈到IT基础运维时,很多人还把公有云只是作为一个基础的资源提供和目录服务,但相对于从底层开始搭建私有云,公有云提供了很多自动化的运维管理工具,帮助IT运维更好的管理。
  这里只是一个最简单自动开机例子,合理的规划流程、触发机制,可以自动完成很多原本的手工操作,希望对大家有所帮助。