设为首页 收藏本站
查看: 1074|回复: 0

[经验分享] 利用Azure Automation实现云端自动化运维(4)

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-5-17 09:25:20 | 显示全部楼层 |阅读模式
                      

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

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

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

DEMO:创建一个按照指定列表关闭VM的runbook
  • 1. 登入portal,选择新建runbook,选择从库中创建,你可以看到其实已经内置了很多的脚本,我们选择Featured里面的Stop Azure Classic VMs,单机下一步,你可以看到脚本的定义:
    845013-20160516161541326-1313501941.jpg

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

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

    845013-20160516161545123-216965596.jpg
    845013-20160516161546560-20284649.jpg

  • 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中的计划日程,定义了什么时候运行这些脚本, 选择链接到新计划:

845013-20160516161548685-1198273052.jpg

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

845013-20160516161549404-1937291962.jpg

845013-20160516161550341-1795327627.jpg


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


                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-218047-1-1.html 上篇帖子: 利用Azure Automation实现云端自动化运维(3) 下篇帖子: Windows Azure 解决方案系列: 能源监测减少支出,通过托管平台拓展业务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表