一,引言

最近看到一位小兄弟在为了做 Azure 云虚拟机的自动关机开启 在群里求助,最后也不知道结果咋样了。

至于他提到的利用 Automation Account 我是没有接触过,并且也没有看资料学习,所以不知道怎么使用 Automation Account 做到定时的开关机。但是值得庆幸是的,我会一些 PoerShell 脚本,知道 PowerShell 可以做到利用脚本开关机;并且在前一段时间稍微熟悉了 Azure Function App,知道 Azure Function App 的模板中是有 TimeTrigger。一个可做到开关机,一个可做到定时执行作业。奇怪的组合就这样诞生了。今天我们就额外为这位网友分享一篇另类的解决方案。Let's go

二,正文

1,不可缺少的主角----- Azure virtual machine

登陆到 Azure Portal 上之后,点击 “Create a resource“,选择 ”Compute“,点击创建 ”Virtual machine“

输入创建VM时,必要的参数

Resource group:”Web_Test_VM_RG“

Virtual machine name:‘cnbateblog-vm”

Region:“East Asia”

Availability options:’No infrastructure redundancy required“

Images:”Windows Server 2012 R2 Datacenter - Gen1“

Size:”根据自己的实际情况选择合适的类型“

Username:”cnbateblogwebvm01“

Password 和 Confirm password 就不用我多说了

OS disk type 选择:”Standard HDD“

点击 ”Next:Networking >“

修改Public IP :”Basic“ && "Static"(主要是为了不想虚拟机在重启之后,Public IP 老是在变化)

点击 ”Review + create“

等待验证完成后,点击 ”Create“

等待创建完成后,点击 ”go to resource“ 跳转到 ”cnbateblog-vm“ 这台机器。我们可以看到微软其实已经给提供了 ”Auto-shundown“(定时关机)的功能了,我们只需要简单的操作一番就可以实现了

选择 ”Operation=》Auto-shundown“

Enabled 选择:”On“

Scheduled shutdown :“7:15:00 PM”

Time zone 选择:“UTC+8”

邮件的发送,大家可以自行选择是否需要

输入完相关参数后,记得点击 “Save” 进行保存

做完这些操作后,我们的重头戏来了 Azure Function App

2,Azure Function App 华丽登场

继续回到 Azure Portal 首页,点击 “Create a resource”,创建 Function App

输入相关参数

Resource Group:”Web_Test_Function_RG“

Function App name:”cnbateblogvm-autostartup“

Publish:”Code“

Runtime stack:”PowerShell Code“

Version:”7.0“

Region:”East Asia“

点击 ”Next:Hosting >“ 进入下一步操作

Storage Account 可以选择默认的名称

这里我自己修改了这个 Storage account 为 ”vmautostartstorage“

关于 ”Monitoring“ 也可以根据实际需求设置是否开启

点击 ”Review + create“

检查参数没有问题后,点击 ”Create“ 创建 Azure Function App

创建完后,点击跳转到该资源,进行设置 Function App

首先我们需要设置开启 Function App 的  Identity(标识)

选择 ”Settings=》Identity“,点击 ”Status=》On“,完事记得点击 ”Save“ 保存操作

同时Azure Function App 需要访问控制 Azure VM

回到刚刚创建好的VM,选择 “Access control(IAM)”,点击 “Add role to this resource” 添加角色指派

输入相关参数

Role:“Owner”

Assign access to:“Function App”

Select:选择我们创建的 Azure Function

点击 “Save” 保存

并且,我们可以在 Access control(IAM)中看到刚刚添加好的角色分配

又回到刚刚创建好的Azure Function App 中,接下来需要创建自动启动虚拟机的代码,

选择 ” Functions =》Function“,点击 ”+Add“

Function template 选择 ”Time trigger“(将按指定计划运行函数),点击 ”Add“

添加完成后,跳转到 Function 的开发这页面,需要我们编写具体的代码

选择 ” Developer =》Intergration“ ,点击 ”计时器(Timer)“

Schedule(计划):”0 0 10 * * *“(每天UTC 时间 上午10点执行,中国时区 也就是下午18点整)为了演示,等下会手动触发

记得时间戳参数名称 ”Time“ 等下会使用到

点击 ”Save“ 保存

接下来点击 ”Code + Test“ 编写 PowerShell 代码

需要注意的是,中间有两行 “Install-Module,Import-Module” 意思是 “安装、导入 PowerShell 库中需要的 PowerShellGet 模块”

如果在测试运行 Azure Function App 出现 “The term 'Get-AzSubscription' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again” 那么就得加上注册、导入 PowerShellGet 模块 的命令,当测试运行成功后,再注释掉就可以了。

# Input bindings are passed in via param block.
param($Timer) $subscription_Id = "Your Subscription_Id "
$tenant_Id = "Your Tenant Id "
$Resource_Name = "Web_Test_VM_RG"
$VM_Name = "cnbateblog-vm" #Install-Module
#Import-Module Select-AzSubscription -SubscriptionID $subscription_Id -TenantID $tenant_Id
Start-AzVM -ResourceGroupName $Resource_Name -Name $VM_Name

保存后,我们可以尝试测试代码

我们可以从 VM 的活动日志中看到当前VM的状态的变化

19:15停止VM

23:20 手动触发 TimeTrigger 启动VM

Bingo!!!!!完成。大家可以自行尝试操作一下

另类的曲线方式定时Start up/Shut down VM 的解决方案的更多相关文章

  1. salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中

    项目源码:https://github.com/zhangyueqidlmu/SOAP-Access-SFDC.git 项目背景:salesforce端相关数据需要其他系统提供,其他系统可以提供相关数 ...

  2. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块AT指令TCP透传方式,定时访问升级(含有数据校验)

    实现功能概要 单片机定时使用http访问云端的程序版本,如果版本不一致, 然后通过http下载最新的升级文件,实现远程升级STM32程序. 兼容Air202 ,SIM800 测试准备工作(默认访问我的 ...

  3. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于WIFI模块AT指令TCP透传方式,定时访问升级(含有数据校验)

    实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootL ...

  4. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定时访问升级(兼容Air202,SIM800)

    实现功能概要 单片机定时使用http访问云端的程序版本, 如果版本不一致,然后通过http下载最新的升级文件,实现远程升级STM32. 兼容Air202,SIM800 测试准备工作(默认访问我的服务器 ...

  5. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(WIFI模块AT指令TCP透传方式),定时访问升级

    前言 学习此代码所需: 实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说 ...

  6. websocket采用tomcat方式,IOC类对象无法注入的解决方案

    前言 我采用的spring框架做的,主要用于IOC AOP ,spring之前采用的2.0版本.(2.0版本出错!下面有解释): 要实现websocket 实现后台主动与JSP发送数据. 具体操作 在 ...

  7. 详细解释如何通过Android自带的方式来实现图片的裁剪——原理分析+解决方案

    我们很多时候需要进行图片的裁剪,其实这个功能在android系统中已经有一套解决方案了,虽然界面和效果并不是很优秀但功能毫无疑问是完美实现了.至于,不用自带的方案怎么做自定义,这个就是后话了.本篇主要 ...

  8. Web方式预览Office/Word/Excel/pdf文件解决方案

    最近在做项目时需要在Web端预览一些Office文件,经过在万能的互联网上一番搜索确定并解决了. 虽然其中碰到的一些问题已经通过搜索和自己研究解决了,但是觉得有必要将整个过程记录下来,以方便自己以后查 ...

  9. 关于linux crontab定时操作oracle不执行的问题解决方案

    问题描述:启动定时任务对oracle表进行操作,但是手动执行脚本无问题,定时任务执行无结果不反馈消息 解决方案:以centos7为例吗,首先确定脚本可手动执行,然后检查/var/log/cron下的日 ...

随机推荐

  1. 小白养成记——Java比较器Comparable和Comparator

    一.使用情景 1.  调用Arrays.sort()方法或Collections.sort()方法对自定义类的对象排序 以Arrays.sort()为例.假定有如下自定义的Person类 1 publ ...

  2. su: Authentication failure解决方法

    su命令不能切换root,提示su: Authentication failure,需要sudo passwd root一次之后,下次再su的时候只要输入密码就可以成功登录.

  3. lambda表达式在python和c++中的异同

    Lambda表达式是干么的?.lambda表达式首先是一个表达式,是一个函数对象一个匿名函数,但不是函数.现在流行语言例如:JS.PHP都支持一种和面向过程.面向对象并列的函数式编程,lambda就是 ...

  4. 00.从0实现一个JVM语言系列

    00.一个JVM语言的诞生 由于方才才获悉博客园文章默认不放在首页的, 原创文章主要通过随笔显示, 所以将文章迁移到随笔; 这篇帖子将后续更新, 欢迎关注! 这段时间要忙着春招实习, 所以项目更新会慢 ...

  5. 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

    剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...

  6. CCF(公共钥匙盒):思维+模拟

    公共钥匙盒 201709-2 这题的思路一开始不是很清晰,一开始想用贪心去做.但是发现按照题目的思路不对.所以这里采用的是类似于多项式的加减的处理. #include<iostream> ...

  7. 2020年12月-第02阶段-前端基础-CSS基础选择器

    CSS选择器(重点) 理解 能说出选择器的作用 id选择器和类选择器的区别 1. CSS选择器作用(重点) 如上图所以,要把里面的小黄人分为2组,最快的方法怎办? 很多, 比如 一只眼睛的一组,剩下的 ...

  8. FreeBSD 虚拟网卡 网桥 路由 映射

    网关与路由 netstat -r Routing tables #路由表 Destination Gateway Flags Refs Use Netif Expire 目的地 网关 状态 接口 超时 ...

  9. php小结

    //函数定义常量:definedefine("PI",3.14); //使用const关键字const PII = 3; 特殊常量:双下划线开始+常量名+双下划线结束,称为魔术常量 ...

  10. 3.学习numyp的矩阵

    Numpy提供了ndarray来进行矩阵的操作,在Numpy中 矩阵继承于NumPy中的二维数组对象,但是矩阵区别于数组,不可共用数组的运算规律 一.创建矩阵 import numpy as np m ...