Azure 基础 : 使用 Automation 定时开机
不知何时 Azure 为虚机提供了自动关机的功能。这是一个很棒的功能,可以帮助我们定时关闭虚机并释放掉资源以节省开支。如果某台虚机在夜间不需要提供服务,我们就可以把它配置为晚上的某个时间点自动关机:

接下来让人郁闷的事情来了!在配置自动关机的时候我们没有发现定时开机的相关配置!不仅如此,笔者在新建虚机的时候发现默认的设置中居然打开了定时关机的功能:

到此为止笔者好像有些明白了,这一定又是套路!肯定是为了推广某个服务而采取的不友好表现。
没办法,接下来只能靠自己了。最直接的方法就是写一个 PowerShell 脚本,在脚本中登录 Azure,然后执行开机的命令。如果要每天定时开机,可以创建一个计划任务定时执行 PowerShell 脚本就可以了。
具体的实现请参考《Azure 基础:用 PowerShell 自动登录》一文(只要把 demo 中重启虚机的命令改为启动命令就可以了)。但是这种方式有一个缺点:我们保存在文件中的登录信息会过期。也就是说每隔一段时间都需要重新登录一遍并导出新的登录信息到文件中。
既然不掏钱的方法有缺点,就让我们看看 MS 推荐的解决方案(要收费的)。
MS 在云端提供了自动化运维的服务:Automation。所以我们可以通过 Automation 中提供的服务来实现定时开机的功能。
创建 Automation Account
要使用 Automation 进行自动化的工作,需要先新建一个 Automation 类型的服务,其实就是创建一个 Automation Account:

Automation Account 会管理很多的资源,其中最重要的是一些执行各种自动化任务的 runbook:

Azure 提供了多种类型的 runbook,用户可以选择自己喜欢的方式。这里我们新建一个 PowerShell 类型的 runbook:

编辑重启虚机的脚本
创建了 PowerShell 类型的 runbook 后就可以编辑真正干活的脚本了,在 runbook 的编辑器中输入下面的代码:
$connectionName = "AzureRunAsConnection"
$rusultMessage = "The virtual machine started successfully."
try
{
# Get the connection "AzureRunAsConnection"
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
Start-AzureRmVM -Name 'vm name' -ResourceGroupName 'resource group name'
}
catch {
$rusultMessage = "The virtual machine failed to start."
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}
finally {
$Username ="sendgrid user name"
$Password = ConvertTo-SecureString "your password" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $Username, $Password
$SMTPServer = "smtp.sendgrid.net"
$EmailFrom = "No-reply@cmteam.com"
[string[]]$EmailTo = "Nick <nick@xxxx.com>"
$Subject = "start vm"
$Body = $rusultMessage
Send-MailMessage -smtpServer $SMTPServer `
-Credential $credential `
-Usessl `
-Port 587 `
-from $EmailFrom `
-to $EmailTo `
-subject $Subject `
-Body $Body `
-BodyAsHtml
Write-Output "Email sent succesfully."
}
首先,最好是通过异常处理结构处理脚本执行中的异常。这里只是简单的把异常重新抛出,最后它们会被显示到执行的日志中。
接下来的一个很重要的概念是 AutomationConnection。我们可以认为它包含了一些信息可以用来连接需要操作的目标资源并提供相应的认证信息。脚本中使用的 AutomationConnection 名字为 AzureRunAsConnection,它是随着 Automation Account 一起创建的。如果 AzureRunAsConnection 不能满足需求,我们可以创建自定义的 AutomationConnection。
然后通过 Add-AzureRmAccount 命令使用 AzureRunAsConnection 提供的信息进行登录从而获得操作资源的权限。
最后由 Start-AzureRmVM 命令执行启动虚机的操作。
发送邮件
为了 demo 的完整性,笔者通过 finally 结构强制在脚本结束前给管理员发送通知邮件。邮件通过 sendgrid 的服务器进行发送,报告启动虚机的过程是否成功:
$Username ="azure_sendgrid user name@azure.com"
$Password = ConvertTo-SecureString "your password" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $Username, $Password
$SMTPServer = "smtp.sendgrid.net"
$EmailFrom = "No-reply@cmteam.com"
[string[]]$EmailTo = "Nick <nick@xxxx.com>"
$Subject = "start vm"
$Body = $rusultMessage
Send-MailMessage -smtpServer $SMTPServer `
-Credential $credential `
-Usessl `
-Port 587 `
-from $EmailFrom `
-to $EmailTo `
-subject $Subject `
-Body $Body `
-BodyAsHtml
Write-Output "Email sent succesfully."
测试脚本的执行情况
在完成脚本的编辑后点击 "Test pane" 进入脚本测试界面,然后点击 "Start" 开始测试:

这个过程会执行你的脚本,并输出执行的日志信息。通过这种方式我们可以检查脚本的执行情况并对脚本进行调整。
配置计划任务
完成脚本的测试后,在编辑界面点击 "Publish" 结束脚本的编辑。然后为 runbook 添加一个计划任务:

上面的配置会在每天早上 6 点钟触发脚本的执行,也就是启动我们指定的虚拟机。
总结
这就 OK 了!是的,看起来还是比较繁琐的。由于内部是通过 Azure 的认证机制完成权限认证的,所以它能够完美的解决我们在其它方案中碰到的登录认证问题。
另外,既然 Automation 服务是专门在云端提供自动化功能的,那它自然应该具有很多拿的出手的能力,笔者后续会对 Azure Automation 做专门的介绍。
Azure 基础 : 使用 Automation 定时开机的更多相关文章
- 免费电子书:微软Azure基础之Azure Automation
(此文章同时发表在本人微信公众号"dotNET每日精华文章") Azure Automation是Azure内置的一项自动化运维基础功能,微软为了让大家更快上手使用这项功能,特意推 ...
- Azure 基础:使用 powershell 创建虚拟机
在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作.由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建.所以专门写一篇文章来记录使用 PowerShell 在 azure ...
- Azure 基础 : 使用 template 简化部署
笔者在前文中介绍了如何使用 PowerShell 脚本在 Azure 上创建虚拟主机.正如你所看到的,整个创建过程还是有点繁琐的,因为我们需要使用 PowerShell 脚本创建并关联所有相关的组件. ...
- Azure 基础:使用 powershell 创建虚拟网络
什么是虚拟网络 虚拟网络是您的网络在 Azure 云上的表示形式.您可以完全控制虚拟网络的 IP 地址.DNS 的设置.安全策略和路由表.您还可以更进一步,把虚拟网络划分为多个子网.然后用它们连接您的 ...
- Azure 基础:Blob Storage
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在前文中介绍了 Table Storage 的基本 ...
- 技嘉 gigabyte b75m d3v 主板 定时开机无效问题解决
BIOS 里面设置定时开机后发现到点并没有正常启动~~~ 百思不得解.后来发现原来是WIN8系统下的控制面板的关机并非正常关机,而是不保存设置的非正常关机,在开始菜单右键——关闭或注销——关闭计算机 ...
- Azure 基础:自定义 Table storage 查询条件
本文是在 <Azure 基础:Table storage> 一文的基础上介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table s ...
- win7电脑定时开机设置方法
在BIOS设置主界面中选择“Power Management Setup”,进入“电源管理”窗口. 注:缺省情况下,“Resume By Alarm”定时开机选项是关闭的. 将鼠标移到“Resume ...
- Azure 上通过Automation 实现定时开关虚拟机
更多内容,请关注公众号: Azure Automation 可以提供一些自动化的功能,比如我们可以指定在每天早上6点开启虚拟机,每天晚上8点关闭虚拟机.同时还提供一些基于监控参数的自动化配置.今天的主 ...
随机推荐
- Apache配置腾讯云SSL证书指引
一.安装Apache 1) 使用yum安装Apache # yum install httpd 2) 修改测试页面 # vim /var/www/html/index.heml PS:修改为测试内容, ...
- CSS之 absoulte 属性
特性: absoulte 与 float 具有相同的特性:包裹性,与破坏性 absoulte 与 float 可以交替使用 不受 relative 限制的 absoulte 定位,行为表现上可以不 ...
- win10 uwp 分治法
其实我想说Path,因为最近在做一个简单的分治. 算法涉及到了一个平面几何的知识.就是三角形p1p2p3的面积等于以下行列式的二分之一: 而且当点P3 在射线P1P2的左侧的时候,表达式为正,右侧表达 ...
- JQuery-基础学习1
1)JQuery语法 jquery语法是为HTML元素的选取编制,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义JQuery 选择符(selector)& ...
- 主要讲下hack的兼容用法,比较浅,哈哈
hack是主要来处理IE的兼容,不同的IE,不同的兼容方式 /* 属性前缀法(即类内部Hack): *color:#000; *号对IE6,IE7都生效 +color:#555; ...
- shell脚本学习(一):shell脚本开发的基本规范和习惯
1.脚本第一行指定脚本解释器 #!/bin/bash 或 #!/bin/sh 2.脚本开头增加作者.脚本作用描述等信息 1 #!/bin/bash 2 #Author: iskylite 3 #Blo ...
- 1_ROS学习
1_搭建树莓派环境 树莓派是一个嵌入式计算机,专门用来做嵌入式开发的.我们组上用的树莓派是raspberry pi 3 mode B,5V供电,最大电流不超过2A: 我们需要在树莓派上安装上操作系统. ...
- 重温C语言小感
这周对我感触比较大的就是重温了下C语言,当然重点还是放到了指针那块,一看到指针就想到了链表,还有那个 指针申明,“函数指针”,“指针函数”, “使用指针实现数组降维数”,还有就是大学初学编程的点滴. ...
- Java就业企业面试问题-ssh框架
SSH框架阶段SSH的优缺点,使用场景? Hibernate优点: (1) 对象/关系数据库映射(ORM) 它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想 ...
- IdentityServer4 实现 OAuth 2.0(密码模式 - HTTP Post 方式)
之前写了一篇文章:<IdentityServer4 实现 OpenID Connect 和 OAuth 2.0> 上面这篇文章虽然详细,但都是点到为止的介绍,并没有实际应用的示例,所以,后 ...