如何利用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下 ...
随机推荐
- Android消息机制架构和源码解析
http://wangkuiwu.github.io/2014/08/26/MessageQueue/
- C语言实现常用数据结构——链表
#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; ...
- spring boot中使用servlet、listener和filter
spring boot中支持使用java Web三大组件(servlet.listener和filter),但是坑比较多,主要是spring boot内嵌tomcat和独立tomcat服务器有一些细节 ...
- 常用URL分享,实用地址
常用地址 文库文档免费下载地址1:http://www.hiwenku.com/ 文库文档免费下载下载2:http://www.20009.net/wk.html google地图拾取器:http:/ ...
- Docker容器化部署Python应用
1. 简介 Docker是目前主流IT公司广泛接受和使用的,用于构建.管理和保护它们应用程序的工具. 容器,例如Docker允许开发人员在单个操作系统上隔离和运行多个应用程序,而不是为服务器上的每个应 ...
- Redis相关面试题
Reids:单线程+io多路复用机制 Redis与Memcached的区别: 一.memcached值是简单字符串,redis支持hash.set.list等复杂数据类型 二.redis可持久化数据, ...
- Flink UDF
本文会主要讲三种udf: ScalarFunction TableFunction AggregateFunction 用户自定义函数是非常重要的一个特征,因为他极大地扩展了查询的表达能力.本文除了介 ...
- Java基础篇01
01. 面向对象 --> 什么是面向对象 面向对象 面向对象程序设计,简称OOP(Object Oriented Programming). 对象: 指人们要研究的任何事物,不管是物理上具体的事 ...
- 【Spring源码解析】—— 策略模式在Spring中的应用
一. 什么是策略模式 策略模式的定义/含义:策略本身就是为了实现某一个目标而采取的一种工作方式,因此只要能够达成目标,则采取哪一种策略都可以:因此多种实际的策略之间是相互平行的. 注意 ...
- 6tunnel数据转发
6tunnel 一条命令实现端口映射.数据转发,实现代理服务器功能. 安装脚本 #!/bin/bash DIR=/opt/software INSTALL=6tunnel-master.tar.gz ...