实现基于AWS EC2定时开关机的方式多种多样,为了方便大家快速入手,本文章会详细介绍如何通过Cloudwatch Event + AWS Lambda 实现AWS EC2定时开关机。
AWS Cloudwatch Event : 设置定时任务,触发器的角色
AWS Lambda :基于Python实现AWS EC2开关机
一、场景描述
AWSCLI + Crontab
AWS Lambda + Python + Cloudwatch Event
结合AWS API编写程序(支持的语言C#,Python,Java等)
第三方开发好的软件
什么是AWS Lambda
AWS Lambda 是一项Serverless服务,可使您无需预配置或管理服务器即可运行代码。您只需按消耗的计算时间付费 – 代码未运行时不产生费用。借助 AWS Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,而且无需执行任何管理。AWS Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量预置和自动扩展、代码监控和记录。目前支持 Node.js、Java、C# 和 Python等语言。
AWS Lambda 配置
1. 打开AWS Lambda 控制台,选择“创建AWS Lambda函数”,在选择函数界面,选择“从头开始制作” ;
名称:"StopEC2Instances"
语言:Python 3.8
角色:选择默认的“lambda_basic_execution”

2. 在Lambda 函数代码编辑框,复制如下信息:
import boto3
region = 'cn-north-1'
# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']
instances = ['i-030abfcce0a18b9b6']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)

3. 重复1-2步骤创建EC2启动实例的函数,代码如下:
import boto3
# Enter the region your instances are in, e.g. 'us-east-1'
region = 'cn-north-1'
instances = ['i-030abfcce0a18b9b6']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)
备注:名字和描述自己填,角色选择之前创建的即可。
配置Cloudwatch Event
1. 进入Cloudwatch控制台,选择规则,点击“创建规则”

事件源:选择“计划”,Crontab表达式:00 23 * * ? *
即设置每晚23点关机实例,关于更多关于表达式的格式,可以参考:https://docs.aws.amazon.com/zh_cn/console/cloudwatch/events/createrule
目标栏,选择“添加目标”,目标类型选择创建的“Lambda函数”
2. 配置详细信息,以下可以参考:
文件名:"StopEC2Instances"
描 述:“stops EC2 instances every day at night”
状 态:已启用
3. 点击创建规则即可.
按照同样的步骤,创建另外的规则在开启实例的配置。

点一下右下角“在看”,让我们做的更好




