准备
我们将要用到的AWS的服务包括:
- EC2, 即云端虚拟机,将用于运行我们的脚本。
- Lambda, 用于操作我们的EC2实例,即启动和关闭。
- IAM, AWS Identity and Access Management, 用于赋予Lambda函数操作我们EC2实例的权限。
- Cloud Watch, 用于定时执行我们的Lambda函数,达到定时开关机的效果。
1:下面先建好EC2 后,就可以建IAM role 了,注意在建role 的时候,要先新建policy:

在建立政策选项卡,将以下JSON内容复制粘贴:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
创建好policy 后,就可以创建role 了,这个role 创建的时候,添加这个policy, 就可以啦。
2: 下面开始创建lambda:
按上面的iam 的role 加进去后,点击" 创建函数", 然后点击下图的 “代码源”里面的 lambda_function.py, 把下面的代码copy 进去:
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
注意:
重复从 建立函数 开始的以上所有步骤,有以下几点改变:
- 函数名称: StartEC2Instances
- Python代码里的
替换为ec2.stop_instances
ec2.start_instances
完成后,在Lambda控制台,就能看到我们刚才建立的两个函数:
3: 下面开始创建cloudwatch 里面的schedule: (cron 表达是: 0 8 * * ? *) ,aws 会自动算出时间如下,注意,时间是 UTC, 时间要以当前北京时间-8.
规则创建好后,可以看到:
测试结果成功,可以看到instance 已经启动了,可以看一下日志:
参考文章: https://segmentfault.com/a/1190000023101856?utm_source=tag-newest
https://blog.csdn.net/captsinpata/article/details/93501163