网站首页 > 技术文章 正文
应用场景
在许多应用场景中我们都有类似定时开启和关闭虚拟机这样的需求,比如凌晨12点关闭虚拟机,早上5点再开启;或者我们需要批量对成百上千台虚拟机做开启和关闭操作,对于类似这种场景靠工程师手动去操作肯定是不现实的,也很容易出错。
那么,在这里我们介绍下通过Azure自动化脚本来实现这种定时后者大量重复性的工作。而使用过Azure的童鞋知道Azure上的虚拟机用ASM和ARM两种,而对于这两种虚拟机的自动化脚本还是用所区别的,下面我们就详细看看脚本的实现。
创建Azure Automation
创建Azure Automation要先进入Azure Portal(https://manage.windowsazure.cn)界面。
请点击此处输入图片描述
按照上图先创建一个Azure Automation账户,然后可以在这个Auto
请点击此处输入图片描述
自动化脚本(Runbook)
我们先来看一下如何在Runbook上编写PS脚本,下图以开启ASM虚拟机为例。
请点击此处输入图片描述
下面所有的Demo Code都是以一台虚拟机做测试,对于批量操作几十台甚至几百台虚拟机只需要修改一下脚本的逻辑。
开启ASM虚拟机脚本
workflow StartAzureVM
{
#获取Azure账号凭证
$Cert = Get-AutomationPSCredential -Name 'PSCertificate'
$SubscriptionId = '{订阅ID}'
$ServiceName = '{云服务名称}'
$VMName='{虚拟机名称}'
#登录Azure账号
Add-AzureAccount -Environment AzureChinaCloud -Credential $Cert
#选中指定订阅
Select-AzureSubscription -SubscriptionId $SubscriptionId
#获取指定虚拟机
$VM = Get-AzureVM -ServiceName $ServiceName -Name $VMName
#判断虚拟机状态
if($VM.PowerState -eq "Started"){
#虚拟机已经启动
Write-Output ($VM.InstanceName + " is already running")
}else{
#启动虚拟机
$StartRtn = Start-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName -ErrorAction Continue
#判断虚拟机是否启动成功
if ($StartRtn.OperationStatus -ne 'Succeeded')
{
# The VM failed to start, so send notice
Write-Output ($VM.InstanceName + " failed to start")
}
else
{
# The VM started, so send notice
Write-Output ($VM.InstanceName + " has been started")
}
}
}
关闭ASM虚拟机脚本
workflow StopAzureVM
{
#获取Azure账号凭证
$Cert = Get-AutomationPSCredential -Name 'PSCertificate'
$SubscriptionId = '34eef720-74d9-4428-9056-e47df19ef6cd'
$ServiceName = 'trainservice'
$VMName='trainwebvm02'
#登录Azure账号
Add-AzureAccount -Environment AzureChinaCloud -Credential $Cert
#选中指定订阅
Select-AzureSubscription -SubscriptionId $SubscriptionId
#获取指定虚拟机
$VM = Get-AzureVM -ServiceName $ServiceName -Name $VMName
#判断虚拟机状态
if($VM.PowerState -eq "Stopped"){
#虚拟机已经关闭
Write-Output ($VM.InstanceName + " is already stoped")
}else{
#关闭虚拟机
$StopRtn = Stop-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName -Force -ErrorAction Continue
#判断虚拟机是否关闭成功
if ($StopRtn.OperationStatus -ne 'Succeeded')
{
# The VM failed to stop, so send notice
Write-Output ($VM.InstanceName + " failed to stop")
}
else
{
# The VM stoped, so send notice
Write-Output ($VM.InstanceName + " has been stoped")
}
}
}
开启ARM虚拟机脚本
workflow StartAzureRmVM
{
#获取Azure账号凭证
$Cert = Get-AutomationPSCredential -Name 'PSCertificate'
$SubscriptionId='34eef720-74d9-4428-9056-e47df19ef6cd'
$ResourceGroupName='tbfilemigrate'
$VMName='tbfilemigrate'
#登录Azure账号
Add-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $Cert
#选择指定订阅
Select-AzureRmSubscription -SubscriptionId 34eef720-74d9-4428-9056-e47df19ef6cd
#获取虚拟机
$VM = Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VMName
#启动虚拟机,这里我们甚至可以自己实现Retry策略
$StartRtn=Start-AzureRmVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -ErrorAction SilentlyContinue
#判断虚拟机是否启动成功
if($StartRtn.StatusCode -ne 'OK'){
Write-Output ($VM.Name + " failed to start")
}else{
Write-Output ($VM.Name + " has been started")
}
}
关闭ARM虚拟机脚本
workflow StopAzureRmVM
{
#获取Azure账号凭证
$Cert = Get-AutomationPSCredential -Name 'PSCertificate'
$SubscriptionId='34eef720-74d9-4428-9056-e47df19ef6cd'
$ResourceGroupName='tbfilemigrate'
$VMName='tbfilemigrate'
#登陆Azure账号
Add-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $Cert
#选中指定Azure订阅
Select-AzureRmSubscription -SubscriptionId 34eef720-74d9-4428-9056-e47df19ef6cd
#获取虚拟机
$VM = Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VMName
#关闭虚拟机
$StartRtn=Stop-AzureRmVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -ErrorAction SilentlyContinue -Force
#判断虚拟机是否关闭成功
if($StartRtn.StatusCode -ne 'OK'){
Write-Output ($VM.Name + " failed to stop")
}else{
Write-Output ($VM.Name + " has been stoped")
}
}
关闭ARM虚拟机脚本
workflow StopAzureRmVM
{
#获取Azure账号凭证
$Cert = Get-AutomationPSCredential -Name 'PSCertificate'
$SubscriptionId='34eef720-74d9-4428-9056-e47df19ef6cd'
$ResourceGroupName='tbfilemigrate'
$VMName='tbfilemigrate'
#登陆Azure账号
Add-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $Cert
#选中指定Azure订阅
Select-AzureRmSubscription -SubscriptionId 34eef720-74d9-4428-9056-e47df19ef6cd
#获取虚拟机
$VM = Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VMName
#关闭虚拟机
$StartRtn=Stop-AzureRmVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -ErrorAction SilentlyContinue -Force
#判断虚拟机是否关闭成功
if($StartRtn.StatusCode -ne 'OK'){
Write-Output ($VM.Name + " failed to stop")
}else{
Write-Output ($VM.Name + " has been stoped")
}
}
Azure申请使用地址:https://www.azure.cn/pricing/1rmb-trial-full/
猜你喜欢
- 2024-09-09 虚拟机PD 16更新升级,将支持苹果ARM处理器
- 2024-09-09 详解ARMv8处理器架构中的虚拟化工具
- 2024-09-09 轻量级免费虚拟机「NanaBox」支持显卡半虚拟化方案
- 2024-09-09 国产化实时操作系统研究之旅7.1-自己动手用 qemu制作虚拟机
- 2024-09-09 Proxmox:开源免费的企业级虚拟化方案
- 2024-09-09 VMware发布新版Fusion虚拟机 为Mac带来Win11 Arm版3D加速
- 2024-09-09 偷偷打开苹果禁碰的盒子:ARM处理器跑x86应用效率几何?
- 2024-09-09 如何使用Parallels 16 Technical Preview在M1 Mac上为ARM运行Windows
- 2024-09-09 国产ARM架构win7虚拟机+统信云打印解决一切不适配打印机
- 2024-09-09 微软开发者大会一口气发布50多项更新,奥特曼压轴剧透OpenAI新模型
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)