相信大家都看过之前的文章:十分钟掌握AWS定时开关机,你Get到了吗?

根据此文章可以实现基于Cloudwatch Event+ Lambda技术的定时开关机,但是细心地会发现,那如果想要对不同的项目或者不同的主机设置不同的开关机规则,那么每一个需求都需要重新写Lambda函数和Cloudwatch Event,复用性非常差。
本文我们将通过EventBridge+Lambda方式,使用参数传递(Input)的方式来实现Lambda函数复用,让我们开始吧!
1. 创建开机Lambda函数(schedule-start-ec2-instance)
import boto3import jsondef lambda_handler(event, context):instances=event['instances']region = "cn-north-1"ec2 = boto3.client('ec2', region_name=region)ec2.start_instances(InstanceIds=instances)for instance in instances:print("Started {} instance in cn-north-1 region".format(instance))
2. 创建关机Lambda函数(schedule-stop-ec2-instance)
import boto3import jsondef lambda_handler(event, context):instances=event['instances']region = "cn-north-1"ec2 = boto3.client('ec2', region_name=region)ec2.stop_instances(InstanceIds=instances)for instance in instances:print("Stopped {} instance in cn-north-1 region".format(instance))
3. 为Lambda Role添加开关机IAM权限(Start-and-Stop-ec2-Policy)
找到Lambda所使用的IAM Role,添加如下内联策略:
{"Version": "2012-10-17","Statement": [{"Sid": "VisualEditor0","Effect": "Allow","Action": ["ec2:StartInstances","ec2:StopInstances"],"Resource": "*"}]}
4. 创建EventBridge Rules
名称:Schedule-Stop-EC2-Rules
CRON表达式:00 13 ? * MON-FRI * (每天晚上21点关闭EC2)

目标:Lambda函数
函数:选择“schedule-stop-ec2-instance”

点击创建即可。重复以上两个步骤,创建开机的EventBridge Rules。
至此为止,基于参数传递的定时开关机功能设置成功。
文章转载自AWS Azure技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




