如何利用Azure Automation以及Tag自动开关VM
这是本博客第一篇技术相关的小贴士,在这里我不会详细介绍所涉及的技术组件的具体使用细节,因为我相信这些大家都可以通过官方文档了解到。如果你是一个看了官方文档依然一脸茫然的IT小白,个人建议是先从基础重新学起再来看具体的需求和方案。
在这片文章里我们会涉及到两个概念,一个是Azure automation,另外就是resource的tag。
Tag这个我就不多说了,绝大多数系统或者平台都会带有的Key-value标识功能。
Automation的话,至少要了解runbook, job, schedule 这几个基本的概念才能继续往下看。
需求:为了避免不必要的资源浪费,许多测试开发环境可以在非工作时间进行关机来达到节约成本的目的。
如果贵公司钱多的烧不完,则可以自豪的忽略这个需求。
话不多说先贴上runbook供大家参考:

workflow Autoshutdown_by_tag
{
$connectionName = "AzureRunAsConnection"
try
{
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName
"Logging in to Azure..."
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint `
-EnvironmentName AzureChinaCloud
}
catch {
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}
$subs = Get-AzureRmSubscription
Foreach ($sub in $subs)
{
Select-AzureRmSubscription -SubscriptionId $sub.SubscriptionId -ErrorAction Continue
$VMs = Get-AzureRmVm -status| Where-Object {$_.Tags.Keys -eq "AutoShutdown" -and $_.Tags.Values -eq "Yes" }
ForEach -Parallel -ThrottleLimit 10 ($VM in $VMs)
{
If ($vm.powerstate -eq "VM deallocated")
{Write-Output "$($VM.Name) is already shutdown"}
else
{Write-Output "Stop: $($VM.Name)";Stop-AzureRMVM -Name $VM.Name -ResourceGroupName $VM.ResourceGroupName -force }
}
}
}

具体说明:
1. 首先这个runbook的目的就是遍历你的账号下所有订阅下用有标签Autoshutdown并且值为Yes的虚拟机,并检测他们的powerstate, 如果不是 deallocated 状态则执行stop-AzureRMVM 命令进行关机。标签和值可以完全按照各自喜好自定义。
2. 此runbook需要关联相对应的schedule才能按时执行,具体如何操作就不深入阐述了。
3. 此Automation的run as account不能expired, 同时必须要对对应的虚拟机拥有开关机的权限。RBAC中自定义role这块我之后会有专门的文章介绍,这里就不深入阐述。
4. 这里用的是workflow,而不是普通的powershell脚本。最主要的优势是可以做到并行操作。 ”ForEach -Parallel -ThrottleLimit 10“在这里就设置了最多同时进行10台虚拟机的关机操作。当你的云平台上有大量的虚拟机时,顺序操作会消耗大量的脚本运行时间,一般来说一台虚拟机的关机动作5到10分钟不等,数量一大可能你的job就会超时。
5. 开机的runbook与关机类似,只是用到的是start-AzureRMVM命令。 另外在新的AzureRM.Compute 模块中,stop-AzureRMVM会有需要人机交互进行确认,因此需要使用 -force 强制执行,这个小tip可以使用在任何其他的类似的powershell命令中。
其实这里涉及到了一些其他的知识点,有一些我会在其他的小贴士中详细介绍。但是如果你只是想单纯的让这个功能跑起来,其实还是非常容易的。
对于一个IT从业人员,如果只是知其然也是可以混口饭吃的。但是一旦遇到高手依然会原形毕露,被别人鄙视一番也是自然。因此我们还是得知其所以然。
一般来说IT知识的掌握分为四个阶段: User-->Know what--->troubleshooting--->Expert。 如果是技术相关岗位,至少也要在自己的专业领域达到Troubleshooting或者expert级别,而对其他的至少要做到know what。这里又涉及到了知识体系的搭建,在之后我也会分享一些相关的体会。
希望这篇文章可以对日常维护Azure 的朋友们有所启发,如果有什么建议欢迎留言讨论。
如何利用Azure Automation以及Tag自动开关VM的更多相关文章
- 利用Azure Automation实现云端自动化运维(4)
在上述基本准备工作做完后,wo们看看如何实现利用Azure Automation实现定时自动开关机的操作,这种场景非常适合Dev/Test环境,因为Azure的虚拟机是按照分钟收费的,所以我们可以在开 ...
- 利用Azure Automation实现云端自动化运维(3)
Azure automation的认证方式:证书 该种方式是推荐的进行Automation认证的方式,好处在于安全性高,过期时间由自己控制,不好的地方在于大家在Windows上要生成证书比较麻烦, ...
- 利用Azure Automation实现云端自动化运维(1)
Azure Automation是Azure上的一个自动化工作流引擎,基于Powershell,来帮助用户简化,集成和自动化Azure上的运维工作,例如: 实现定时开关虚拟机,节约成本 实现定时创建删 ...
- 利用Azure Automation实现云端自动化运维(2)
Azure automation的认证: 用户名和密码 在Azure的automation中使用Powershell可以管理当前订阅的资源,也可以管理不同订阅的资源,那么问题就来了,安全性如何 ...
- Step by Step 用Azure Automation 来开虚机(ARM)
使用Azure Automation来自动化处理各种重复的耗时的云管理任务从而帮助云运维人员提升效率,帮助降低运营成本. 具体相关的介绍以及怎样利用Azure Automation来完成定期开关虚拟机 ...
- 免费电子书:微软Azure基础之Azure Automation
(此文章同时发表在本人微信公众号"dotNET每日精华文章") Azure Automation是Azure内置的一项自动化运维基础功能,微软为了让大家更快上手使用这项功能,特意推 ...
- 新版Azure Automation Account 浅析(三) --- 用Runbook管理AAD Application Key
新版Azure Automation Account 浅析(三) --- 用Runbook管理AAD应用的Key 前篇讲过有一个面向公众的Runbook库,社区和微软一直往其中加入新的Runbook, ...
- 使用Azure Automation(自动化)定时关闭和启动虚拟机
1. 概述 作为Windows Azure的用户,使用Azure的过程中,最担心的事情就是还没到月底,预设的费用就快消耗完了(下面两张账单图是我最讨厌看到的).但是仔细分析自己的费用列表,发现绝大部分 ...
- 利用Azure嵌套虚拟化,解决公有云上机器不能启动的问题
很多时候我们都会碰到因为意外重启,机器硬盘被损坏导致无法启动,或者是因为各种原因Windows上的RDP服务启动不了,Linux上的SSH无法链接等等问题.碰到这种问题基本上很难解决以前都是将VHD下 ...
随机推荐
- C#每天进步一点--异步编程模式
C#可以有一个简单易用的机制用于异步执行方法,那就是委托.下面我介绍三种模式,对于这三种模式来说,原始线程都发起了一个异步方法,然后做一些其他处理.然而这些模式不同的是,原始线程获取发起的线程已经完成 ...
- 一、OpenScenGraph环境搭建
1.OpenSceneGraph 3.4.0 网址 http://www.openscenegraph.org/ github源码地址 https://github.com/openscenegr ...
- 快速删除mysql表中的数据
一.清空全部数据,不写日志,不可恢复,速度很快 truncate table 表名; 二.清空全部数据,写日志,可恢复,速度很慢 delete from 表名;
- 网站压力测试工具 Webbench简单介绍
Webbech能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况.Webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量.Webbench不但 ...
- CentOS7.5上FTP服务的安装与使用
1.FTP简介 1.1FTP:File Transfer Protocol 文件传输协议 FTP是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层.文件传送(f ...
- 简单看看java之枚举
枚举类这个类用的比较少,对这个不怎么熟悉,最近看源码刚好可以好好了解一下,那么,枚举Enum是什么呢?在jdk中,Enum是一个抽象类下图所示,这就说明这个类是不能进行实例化的,那么我们应该怎么使用呢 ...
- K8s集群部署(四)------ Flannel网络部署
所有节点都要部署Flannel网络,在所有节点操作. 1.为Flannel生成证书 [root@k8s-master ssl]# pwd /usr/local/src/ssl [root@k8s-ma ...
- 多线程与高并发(四)volatile关键字
上一篇学习了synchronized的关键字,synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile是一个轻量级的同步机制. 前面学习了Java的内存模型,知 ...
- Codeforces Gym101205D:Fibonacci Words(KMP+递推)
Gym 101205D 题意:f[0] = "0", f[1] = "1",接下来f[i] = f[i-1] + f[i-2],相当于字符串拼接.然后给出一个n ...
- django基础知识之自连接:
自连接 对于地区信息,属于一对多关系,使用一张表,存储所有的信息 类似的表结构还应用于分类信息,可以实现无限级分类 新建模型AreaInfo,生成迁移 class AreaInfo(models.Mo ...