使用lambda与cloudwatch实现定时开关EC2
aws的ec2实例是按需收费的,部分用户在使用ec2过程中发现其业务主要是在一天的某段时间,其余的时候 ec2是闲置空转的状态。而闲置的时候又要被aws计时收费。 所以笔者就想能不能通过aws的Lambda服务,来实现定时开关机,从而减少不必要的费用。
用户需求: 在晚上10:00~第二天早上10:00这段时间, 将ec2实例自动关机, 早上10:00~晚上10:00 这段时间ec2自动开机运行
步骤:
- 创建停止和启动 EC2 实例的 Lambda 函数
1.在aws console 中选择Lambda服务创建函数
2.对于名称,输入函数的名称,例如“StartStop-XXXX”
3.创建新的IAM角色,策略可参考如下代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
4.创建完角色后返回Lambda控制台,编写Start代码,语法参考如下:
import boto3
region = 'cn-northwest-1'
instances = ['i-xxxxxxxxxxxxxxxx, 'i-xxxxxxxxxxxxxxxx']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)
5.保存此代码版本,标注版本V1
6.现在做stop部分的修改:
import boto3
region = ' cn-northwest-1'
instances = ['i-xxxxxxxxxxxxxxxx, 'i-xxxxxxxxxxxxxxxx']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)
7.保存此版本标注V2
二.控制台选择Cloudwatch服务,创建规则
1.事件源“”选择“计划”,笔者选择“cron表达式” ,输入 “0 2 * * ? *”
2.Cron的具体格式可参考官方文档:
https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/events/ScheduledEvents.html
此处一定注意!!!cron 使用的时间是UTC时间!环境是我们国内的话,时间要以当前北京时间-8.
具体UTC时间可查询此网站:https://time.is/UTC
3.在“目标”处选择“Lambda函数”,选择函数名,配置版本处点击“版本,”’选择“V1”。
4.点击“配置规则详细信息”,文件名和描述均写“StartEC2”
5.重复步骤2操作,这时cron表达式为“0 14 * * ? *”
6.重复上文3,4两步骤,函数版本选择“V2”。文件名和描述均写“StopEC2”
7.测试,若机器到时间未停止,首先检查cron表达式和UTC时间表述。其次检查Lambda代码中的instance ID,region是否正确。
- ASM 翻译系列第十二弹:ASM Internal amdu - ASM Metadata Dump Utility
- 分享一个Linux无法创建文件夹,但是目录权限却显示正常的问题和解决
- 桌面白屏(Active故障)修复批处理
- ASM 翻译系列第十三弹:ASM 高级知识 - Forcing the issue
- ASM 翻译系列第十四弹:ASM Internal Rebalancing act
- DIY网站统计:WordPress排除管理员评论及精准友链数的方法
- Linux运维工程师:30道面试题整理
- ASM 翻译系列第十五弹:ASM Internal ASM File Directory
- ASM 翻译系列第十六弹:ASM Internal ASM Active Change Directory
- ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory
- Windows 7下获取System权限
- ASM 翻译系列第十八弹:ASM Internal ASM file number 5
- 菜单式Shell运维脚本调试小记
- 优化Postgres-x2 GTM
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JMeter二次开发插件实例
- 「R」Obtain RNAseq Values for a Specific Gene in Xena Database
- 使用JMeter测试TCP协议
- SQL使用(一):如何使用SQL语句去查询第二高的值
- OpenCV加载图片显示对应类型(位深度)方法
- 小程序快速入门教程(登录注册、开发工具、文件及结构介绍)
- 面试题-统计字符出现最大次数
- pytorch中文语言模型bert预训练代码
- React环境搭建
- leetcode - 旋转数组的最小数字
- 笔记101 | 文件的压缩与解压笔记
- 诸葛亮vs司马懿,排序算法大战谁能笑到最后?
- Centos密钥登陆,解决云服务器被尝试登陆问题
- Fair Scheduler到Capacity Scheduler 转换工具
- 这可能是把SpringBoot配置文件讲解的最详细的文章了