一、背景与概述二、服务设置开机启动三、编写Lambda开关机函数四、基于Scheduler计划实现定时开关机
使用过aws云服务的大概都了解到,服务器是按时长收费的,计费粒度是小时,当然还有一些类似国内云服务厂商提供的包年包月的计费方式,比如预留实例和Saving Plans等,不过大部分场景都是使用的按量计费模式。
那么基于这种计费模式,对于一些中小型企业,采购的服务器一般分两种,一种是不能停机的业务服务或者基础服务,一种是工具服务,比如打包部署平台,为了追求使用高性能采购高配置机型,但是又想节省成本,怎么办呢?
虽然aws的ec2是按使用时长计费的,但是如果关机了就不再继续收取实例费用,当然在没有销毁的情况下,SSD磁盘和弹性ip等会继续收费,不过相比于实例费用几乎是毛毛雨啦。
那这里我们就可以讨个巧了,以jenkins打包平台为例,为了提高打包速度,直接采购8c 16g机型部署jenkins服务,可以通过以下几点实现定时开关机来节省成本:
那么通过实现这些能力,就能实现ec2的按需定时开关机了。
以jenkins服务为例,通过以下命令设置成开机启动:
sudo systemctl enable jenkins
其他服务也可以写成systemd服务单元交给systemctl来管理,同样可以使用enable命令来实现开机启动。
创建一个Lambda函数:
选择python语言,并且选择一个有权限调用aws sdk控制ec2实例状态的角色,创建角色此处不展开。
编写脚本内容,指定ec2实例所在大区以及实例id,调用boto3 sdk能力来操作指定实例的状态。
import json
import boto3
region = 'ap-xxx'
instances = ['i-13435555555xxxx']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started instances: ' + str(instances))
脚本很简单,同样关机Lambda函数把脚本内容ec2操作部分替换成:
import json
import boto3
region = 'ap-xxx'
instances = ['i-13435555555xxxx']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped instances: ' + str(instances))
这样Lambda脚本就具备了启停Ec2实例的能力了。
在Scheduler控制台创建计划:
选择cron类型的计划,并填入需要的调度格式,以及时区信息:
然后选择计划的执行目标位Lambda Invoke,并从列表中选择对应的Lambda函数。
然后选择默认执行角色并保存,这样我们执行计划,也就是调度任务就创建好了。并且我们能够预览后续的执行频次和周期:
当然我们也可以进行编辑、删除和禁用,来控制任务的执行策略。
这样我们就基于Scheduler+Lambda+aws sdk实现了Ec2实例的定时开关机能力了。
本文分享自 PersistentCoder 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有