实现原理

在CloudWatch中创建规则用来定时调用lambda函数,lambda函数中编写启动和停止EC2实例的代码实现启动停止EC2实例。

实现前提和所创建的资源

要实现定时启停EC2实例需要CloudWatch规则来调用lambda函数启动和停止EC2实例,而lambda如果想要操作EC2 需要给lambda附加一个role 并要为role附加所需的权限。

综上创建的资源有:

  1. CloudWatch中创建了两个规则 StartInstanceStopInstance
  2. 四个分别用来启动和停止宁夏和北京区EC2实例的lambda函数 StopEC2InstancesStarEC2InstancesStopEC2InstancesForBeiJingStarEC2InstancesForBeiJing
  3. 一个用来附加到lambda函数的role lambda_stop_start_ec2_rol
  4. 一个包含启停实例所需权限的策略lambda_stop_start_ec2,并将该策略附加到所创建的角色

各资源配置

CloudWatch规则

资源用途

  1. StartInstance用来在每天6:00调用启动EC2实例的lambda函数StarEC2InstancesStarEC2InstancesForBeiJing
  2. StopInstance用来在每天20:30调用停止EC2实例的lambda函数 StopEC2InstancesStopEC2InstancesForBeiJing

如何修改

  1. 想要修改EC2实例启停时间只需要修改CloudWatch规则的Corn表达式即可,Cron的具体格式可参考官方文档:https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/events/ScheduledEvents.html

此处一定注意!!!cron 使用的时间是UTC时间!环境是我们国内的话,时间要以当前北京时间-8:



  1. 规则只有在启用状态才会执行进行启用和禁止操作可以实现对规则的启用和停止。当前是禁止状态:

Lambda函数

资源和当前代码规则

  1. StopEC2Instances :stop宁夏区中具有特定标签(key:online value:day)且实例状态为running的EC2实例
  2. StarEC2Instances :启动宁夏区中具有特定标签(key:online value:day)且实例状态为stopstopped的EC2实例
  3. StopEC2InstancesForBeiJing :stop北京区中具有特定标签(key:online value:day)且实例状态为running的EC2实例
  4. StarEC2InstancesForBeiJing :启动北京区中具有特定标签(key:online value:day)且实例状态为stopstopped的EC2实例

函数代码修改

1.如果不想用key:online value:day的标签想用其他的标签则需要修改lambda函数代码(注意四个函数都要修改)点击要修改的lambda函数名找到函数代码部分如下图:

修改完点击保存。

IAM role和策略

  1. Role: lambda_stop_start_ec2_rol lambda所需的角色
  2. 策略lambda_stop_start_ec2:配置有lambda操作EC2所需的权限

直接启用

如果每天6:00启动20:30停止具有特定标签(key:online value:day)的EC2实例符合你的需求需要进行如下操作来启用:
1. 为要实现自动启停的实例配置标签且标签的key必须是online,value必须是day 如图:

2. 启用CloudWatch 规则: