AWS提供按需付费的支付模式,如果在不使用实例的情况下关闭实例,将能节省很多成本,AWS Instance Scheduler是一个AWS实现定时自动开关机的解决方案,支持EC2和RDS。
原理:
AWS CloudFormation模板按客户定义的时间间隔设置Amazon CloudWatch事件。此事件将调用Instance Scheduler AWS Lambda函数。在配置期间,用户定义AWS区域和账户以及自定义标签实例计划程序将用于将计划与适用的Amazon EC2和Amazon RDS实例相关联。这些值存储在Amazon DynamoDB中,并且Lambda函数每次运行时都会检索它们。然后,客户将自定义标签应用于适用的实例。是通过资源标签实现控制资源的启动和停止(不是终止)。
场景:
如测试环境和开发环境,在夜间不使用的时候可以将资源自动关闭,如早上9:00开机,晚上9点关机。这样一来资源费用直接节省一半。
此解决方案会用到资源lambda和dynamoDB,每月成本大概在5$左右。还是非常便宜的。
现在就开始部署
- 1 使用模板创建CloudFormation
https://s3.amazonaws.com/solutions-reference/aws-instance-scheduler/latest/instance-scheduler.template -
2
堆栈名称:Schedule
Instance Scheduler tag name:Schedule
Service(s) to schedule:Both
Schedule Aurora Clusters:根据需要填写
Create RDS instance snapshot:是否要在停止之前创建快照
Region(s):如果留空,则应用在本region
Default time zone:选择正确的时区 Asia/shanghai
Cross-account roles:如需跨账户部署,选填
Started tags:Scheduler=started
Stopped tags:Scheduler=stopped
其他参数默认即可
等待一段时间直到状态栏显示:CREAT_COMPLETE就算部署成功,接下来继续后面的部署
接下来的部署操作,我将采用CLI的方式演示,因为我觉得这种方式比较直观易懂。
先决条件:
1必须安装Python2 ,python3无法工作
2有足够权限的aws 凭证,并在CLI配置完成
3下载并安装
在scheduler-cli目录中,运行 setupPython脚本:
sudo python setup.py install
安装成功后 scheduler-cli --help
应该有如下输出
接下来只需要配置这几个方面即可完成部署
1创建周期
scheduler-cli create-period --name "weekdays" --begintime 09:00 --endtime 18:00 --weekdays mon-fri --stack Schedule
2创建时间表
scheduler-cli create-schedule --name TianjinOfficeHours --periods weekdays --timezone Asia/shanghai --stack Schedule
***附:删除周期和时间表
$ scheduler-cli delete-period --name weekdays --stack Schedule
$ scheduler-cli delete-schedule --name TianjinOfficeHours --stack Schedule
最后一步将需要应用此方案的资源打上标签即可大功告成
如果要暂时停掉这个方案只需在CloudFormation中创建更改集并应用即可