暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

EventBridge + Lambda实现定时开关机

AWS Azure技术分享 2021-10-13
1035


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

根据此文章可以实现基于Cloudwatch Event+ Lambda技术的定时开关机,但是细心地会发现,那如果想要对不同的项目或者不同的主机设置不同的开关机规则,那么每一个需求都需要重新写Lambda函数和Cloudwatch Event,复用性非常差。


本文我们将通过EventBridge+Lambda方式,使用参数传递(Input)的方式来实现Lambda函数复用,让我们开始吧!


1. 创建开机Lambda函数schedule-start-ec2-instance

import boto3
import json


def 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 boto3
import json


def 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论