在上述基本准备工作做完后,wo们看看如何实现利用Azure Automation实现定时自动开关机的操作,这种场景非常适合Dev/Test环境,因为Azure的虚拟机是按照分钟收费的,所以我们可以在开发测试人员上班的时候打开虚拟机,而在下班,周末的时候关闭虚拟机,从而节约成本,从另外一个层面来讲,也是体现云的灵活性。

首先讲一下设计的基本原则,如何做能让你的自动化脚本更灵活,更具有可移植性:

  • 参数化:尽量不要在脚本中写死任何变量,负责除了修改代码,别无他法,而且可维护性会变的很差
  • 合理使用资产:在Azure的automation中,有一部分配置是需要更新,变化的,所以这一部分配置应该放在资产中,让运维人员来修改,比如有哪些虚拟机需要开机,关机
  • 模块化:通用的一些脚本可以写成runbook,以便于代码复用和共享

DEMO:创建一个按照指定列表关闭VM的runbook

  1. 1. 登入portal,选择新建runbook,选择从库中创建,你可以看到其实已经内置了很多的脚本,我们选择Featured里面的Stop Azure Classic VMs,单机下一步,你可以看到脚本的定义:

     

  2. 2. 输入你希望的runbook名称,选择我们之前建立的自动化账户,地区,选择完成将runbook添加到你的自动化账户:

     

  3. 3. 打开自动化账户,在runbook的tab下你就可以刚才创建的runbook Stop-AzureVMLib,点击这个runbook,选择创作,就可以看到这个脚本的全部源码,并可以修改,在底部

     

     

  4. 4. Runbook的基本结构如下,以workflow开头,后面是你的runbook名字,param是你的输入参数,outputtype里面定义了string类型的返回结果:

     

     

     

    workflow Stop-AzureVMLib

    {

    param (

    [Parameter(Mandatory=$false)]

    [String] $ServiceName

    )

     

    # Returns strings with status messages

    [OutputType([String])]

     

    Body

    }

     

    5. 现在我们设计一个Stop-VM的可以在实际环境中使用的runbook,实现以下几个目标:

  • 用户可以配置哪些vm需要被定时停止,而不需要修改代码
  • 认证信息可以被修改而不需要修改代码
  • 周六周日不需要定时关机或者开机
  • 详细的执行日志信息

     

6 . 使用Azure的用户名密码进行认证,相关的orgid,密码我们都保存在资产中,通过动态获得,而不需要修改代码,通过Get-AutomationVariable得到的数据都可以在添加资产中添加变量获得:

#资产中定义的用户名和订阅名

$AzureCredentialAssetName = 'automationuser@XXXX.cn'

$AzureSubscriptionIdAssetName = 'automationsubid'

 

# 得到资产中定义的用户名密码和订阅名称

$Cred = Get-AutomationPSCredential -Name $AzureCredentialAssetName

$SubId = Get-AutomationVariable -Name $AzureSubscriptionIdAssetName

 

#获得需要关闭的虚拟机列表,以逗号分隔

$vmconfiglist = Get-AutomationVariable -Name 'vmnamelist'

 

$vmlist = $vmconfiglist -split ","

 

#获得认证,添加订阅进行后续操作

$null = Add-AzureAccount -Credential $Cred -Environment AzureChinaCloud -ErrorAction Stop

    
 

$null = Select-AzureSubscription -SubscriptionId $SubId -ErrorAction Stop

 

7. 那么如果使用证书的方式,如何获得认证昵?

     $AzureSubscriptionIdAssetName = 'automationsubid'

$subscriptionNameAssetname = 'azuresubscriptionname'

#获得订阅ID和订阅名称

$SubId = Get-AutomationVariable -Name $AzureSubscriptionIdAssetName

$subscriptionName = Get-AutomationVariable -Name $subscriptionNameAssetname

#获得认证名称和证书

$certificateName = Get-AutomationVariable -Name "mycertificateName"

$certificate = Get-AutomationCertificate -Name $certificateName

#根据证书这是当前订阅

Set-AzureSubscription -SubscriptionName $subscriptionName -SubscriptionId $SubId -Certificate $certificate -Environment AzureChinaCloud -ErrorAction Stop

Select-AzureSubscription -SubscriptionId $SubId -ErrorAction Stop

8. 剩下的就是根据虚拟机机器名称得到虚拟机进行停止虚拟机的操作了,所有的源代码我都放在了Github,请分别下载测试:

通过用户名密码验证方式停止虚拟机:

https://github.com/kingliantop/azurelabs/blob/master/automation/stop-azurevms.ps1

通过用户名密码验证方式启动虚拟机:

https://github.com/kingliantop/azurelabs/blob/master/automation/start-azurevms.ps1

通过证书方式停止虚拟机:

https://github.com/kingliantop/azurelabs/blob/master/automation/stop-azurevmswithcert.ps1

通过证书方式启动虚拟机:

https://github.com/kingliantop/azurelabs/blob/master/automation/start-azurevmswithcert.ps1

9. runbook编辑完成,点击发布正式发布该runbook,但这个时候这些脚本不会自动运行,需要你设置定时运行方式,选择runbook中的计划日程,定义了什么时候运行这些脚本, 选择链接到新计划:

10. 输入计划的名称,设置每天定时关机的计划,你可以看到目前的设置选项中到小时级,或者每天,但没有工作日或者周末定义,需要自己写代码实现,具体实现请参考代码。

 

11. 每个runbook都需要设置加护日程,通过这种方式,你就可以实现早上开机,晚上关机,周末不开关机等操作。

利用Azure Automation实现云端自动化运维(4)的更多相关文章

  1. 利用Azure Automation实现云端自动化运维(1)

    Azure Automation是Azure上的一个自动化工作流引擎,基于Powershell,来帮助用户简化,集成和自动化Azure上的运维工作,例如: 实现定时开关虚拟机,节约成本 实现定时创建删 ...

  2. 利用Azure Automation实现云端自动化运维(3)

    Azure automation的认证方式:证书   该种方式是推荐的进行Automation认证的方式,好处在于安全性高,过期时间由自己控制,不好的地方在于大家在Windows上要生成证书比较麻烦, ...

  3. 利用Azure Automation实现云端自动化运维(2)

      Azure automation的认证: 用户名和密码   在Azure的automation中使用Powershell可以管理当前订阅的资源,也可以管理不同订阅的资源,那么问题就来了,安全性如何 ...

  4. CentOSLinux系统中Ansible自动化运维的安装以及利用Ansible部署JDK和Hadoop

    Ansible 安装和配置 Ansible 说明 Ansible 官网:https://www.ansible.com/ Ansible 官网 Github:https://github.com/an ...

  5. 使用Ansible实现数据中心自动化运维管理

    长久以来,IT 运维在企业内部一直是个耗人耗力的事情.随着虚拟化的大量应用.私有云.容器的不断普及,数据中心内部的压力愈发增加.传统的自动化工具,往往是面向于数据中心特定的一类对象,例如操作系统.虚拟 ...

  6. 简单聊一聊Ansible自动化运维

    一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...

  7. 阿里云发布CloudOps白皮书,ECS自动化运维套件新升级

    12月10 日,2021云上架构与运维峰会上,阿里云发布业界首部<云上自动化运维白皮书>(简称CloudOps白皮书),并在其中提出了CloudOps成熟度模型.同时,阿里云还宣布了ECS ...

  8. 一文详解 Ansible 自动化运维

    开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...

  9. SQL Server 自动化运维系列

    本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...

随机推荐

  1. deepin 2014 安装后 ,grub出错

    今天deepin2013一直出错,就想尝试下2014,so,果断下载安装,然后悲剧的又被坑了. 环境win7位于sda,deepin安装在sdb 安装完毕后,启动报错,找不到设备uuid 无奈之下,重 ...

  2. [分享]我的LABVIEW快速开发串口测试软件实例

    LABVIEW是美国国家仪器公司(National Instruments,简称NI)的创新产品,它允许编程人员使用图形方式来进行编程,摒弃了艰涩难懂的代码,只需要拖动相应图形控件然后连线,进行简单的 ...

  3. Mac OSX下面的博客客户端Marsedit使用

       在windows下面,有一个很好用的博客客户端,叫做windows live writer,不得不感叹,其所见即所得的方面真的是很方便,特别是还可以方便的把word上的内容直接帖上去,包括文件中 ...

  4. Codeforces 494B Obsessive String

    http://www.codeforces.com/problemset/problem/494/B 题意:给出两个串S,T,求有几种将S分成若干个子串,满足T都是这若干个子串的子串. 思路:f[n] ...

  5. Windows7里的“计算器”你真的会用吗?

    “计算器”是不同Windows版本中的必备工具,虽然功能单一,但的确是人们日常工作中不可缺少的辅助工具,本文就来谈谈它的使用. 一.标准型和科学型两种面板 我们既可从Windows附件菜单中启动它,也 ...

  6. 从Hello, world开始认识IL <第一篇>

    IL代码分析方法 Hello, world历史 .NET学习方法论 1.引言 1988年Brian W.Kernighan和Dennis M.Ritchie合著了软件史上的经典巨著<The C ...

  7. Android高德地图开发具体解释

    这段时间开发的时候用到了高德地图,对高德地图开发有心得体会,如今分享给大家.对我开发过百度地图的我来说,整体来说高德地图Demo,没有百度解说的具体 个人更偏向于使用百度地图,可是没办发,项目须要使用 ...

  8. Wap touch flispan demo

    直接上代码了 仔细看看例子就会明白 简单实用 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8& ...

  9. printf "%.*s" 分类: 小细节 2015-07-04 14:36 2人阅读 评论(0) 收藏

    ref : http://www.cnblogs.com/yuaqua/archive/2011/10/21/2219856.html 小数点.后"*"表示输出位数,具体的数据来自 ...

  10. XMPP通讯开发-仿QQ显示好友列表和用户组

    在 XMPP通讯开发-服务器好友获取以及监听状态变化   中我们获取服务器上的用户好友信息,然后结合XMPP通讯开发-好友获取界面设计    我们将两个合并起来,首先获取用户组,然后把用户组用List ...