方法一: 使用aws lambda + cloudwatch服务
使用aws lambda, 将trigger/event source设置为CloudWatch Events - Schedule , 再把启动或者关闭服务的函数放到handler里, 这样的话就可以定时触发instance的启动和关闭了,另外在cloudwatch可以看到详细日志流和调用成功率和延时的dashboard,方便调试排障和了解概况。
这个方法的优点是:
操作简单, 稳定性好(由lambda服务自身保证高可用), 无需启用新的实例,或者占用额外资源,且几乎是免费的方案,因为目前lambda服务前100万次的运算是免费的。
方法二: 使用aws data pipeline
大致实现是使用data pipeline运行aws cli命令。 需要单独起一台ec2实例来运行data pipeline
参考How do I stop and start Amazon EC2 Instances at scheduled intervals with AWS Data Pipeline?
方法三: 使用aws OpsWorks服务
定制chef的cookbook,或者使用aws提供的gui界面来实现,不需要用到命令行
方法四: 使用auto scaling服务
大致实现是定时增减实例数。
有网友反应使用这种方法可能会使原有的EBS不能挂载到主机上,且autoscaling貌似使直接删除实例的,不能保持原有的instance 的状态。 暂未验证。
参考Running EC2 Instances on a Recurring Schedule with Auto Scaling
方法五: 使用第三方网站提供的服务
第三方的网站有
Elastic Cloud Gate
Skeddly
Ylastic
优点: 操作简单, 且能实现更多的功能定制。
缺点: 需要额外注册第三方网站的账号, 有的网站需要收费, 另外需要暴露secret key给第三方
方法六: 将定时关机程序部署在其它机器或者实例
大致的过程是起一台单独的instance跑脚本,
然后给其它要定时开关的机器打上tag, 脚本会去读取tag, 按照tag上定义的时间定时关闭和启动机器。 这种做法需要另起一台ec2实例, 另外需要脚本需要定时扫描,适合机器量适中,且不同instance的起停时间不一致的场景 。 且需要保证跑脚本的那台ec2实例的可用性。
优点: 可以灵活地为每个实例设定不同时间。
缺点: 需要定时扫描, 起停的时间不能精确设定
方法七: 自己开发app,定时调用aws api
介绍略。
本文介绍了7种定时关闭和启动Amazon EC2实例的方法,包括使用AWS Lambda + CloudWatch、Data Pipeline、OpsWorks、Auto Scaling服务,以及第三方工具和自开发应用。Lambda方案因其简单、稳定和低成本而被推荐。每种方法都有其优缺点,适用于不同的使用场景。
462

被折叠的 条评论
为什么被折叠?



