在Lambda中使用boto3对AWS EventBridge Rules的操作

367 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

1.定义events client

1.1 首先导入boto3的包

import boto3

1.2 定义events client

import boto3
from botocore.config import Config #导入配置模块
# 在这里定义events的client,并且使用Config来设置区域
events = boto3.client('events',config=Config(region_name='us-east-1'))

2.对EventBridge Rules进行描述操作(列出)

2.1 请求语法

response = client.list_rules(
    NamePrefix='string',
    EventBusName='string',
    NextToken='string',
    Limit=123
)

2.2 列出所有规则

import boto3
from botocore.config import Config #导入配置模块
# 在这里定义events的client,并且使用Config来设置区域
events = boto3.client('events',config=Config(region_name='us-east-1'))
# 定义 list_events 来接收events client请求的返回数据
list_events = events.list_rules()
# 使用print进行打印
print(list_events)

2.3 列出指定Rule,以Rule Name作为参数

import boto3
from botocore.config import Config #导入配置模块
# 在这里定义events的client,并且使用Config来设置区域
events = boto3.client('events',config=Config(region_name='us-east-1'))
# 在下面的请求中,添加了一个 NamePrefix 的字符串 ,其中 'leifengRule' 就是某个 rule 的名字,那么这个请求只会返回该rule的相关信息,而不是打印所有
# 使用默认的 EventBusName = 'default'
list_events = events.list_rules(
    NamePrefix='leifengRule'
    EventBusName='default'
    )
# 使用print进行打印
print(list_events)

3.EventBridge Rule的创建、删除、启用、关闭

3.1 创建rule

3.1.1 请求语法

response = client.put_rule(
    Name='string',
    ScheduleExpression='string',
    EventPattern='string',
    State='ENABLED'|'DISABLED',
    Description='string',
    RoleArn='string',
    Tags=[
        {
            'Key': 'string',
            'Value': 'string'
        },
    ],
    EventBusName='string'
)

3.1.2 创建rule

import boto3
from botocore.config import Config #导入配置模块
# 在这里定义events的client,并且使用Config来设置区域
events = boto3.client('events',config=Config(region_name='us-east-1'))
# 定义 rule_name,state,cron
rule_name = 'fengleiRule'
rule_stat = 'ENABLED' # 这里可以定义 ENABLED | DISABLED
rule_sche_cron = 'cron(59 23 * * ? *)' #定义 cron规则
create_rule = events.put_rule(
            Name=rule_name,
            ScheduleExpression=rule_sche_cron,
            State=rule_stat,
            EventBusName='default'
        )

3.2 删除rule

3.1 请求语法

response = client.delete_rule(
    Name='string',
    EventBusName='string',
    Force=True|False
)

3.2 删除rule

import boto3
from botocore.config import Config #导入配置模块
# 在这里定义events的client,并且使用Config来设置区域
events = boto3.client('events',config=Config(region_name='us-east-1'))
# 定义 rule_name
rule_name = 'fengleiRule'
delete_rule = events.delete_rule(
            Name=rule_name,
            EventBusName='default',
            Force=True
        )

3.3 开启关闭rule

3.3.1 请求语法

# 启用规则
response = client.enable_rule(
    Name='string',
    EventBusName='string'
)

# 关闭规则
response = client.disable_rule(
    Name='string',
    EventBusName='string'
)

3.3.2 启用/关闭 rule

# 启用rule
import boto3
from botocore.config import Config #导入配置模块
# 在这里定义events的client,并且使用Config来设置区域
events = boto3.client('events',config=Config(region_name='us-east-1'))
# 定义 rule_name
rule_name = 'fengleiRule'
enable_rule = events.enable_rule(
            Name=rule_name,
            EventBusName='default'
        )
        

# 关闭rule
import boto3
from botocore.config import Config #导入配置模块
# 在这里定义events的client,并且使用Config来设置区域
events = boto3.client('events',config=Config(region_name='us-east-1'))
# 定义 rule_name
rule_name = 'fengleiRule'
enable_rule = events.disable_rule(
            Name=rule_name,
            EventBusName='default'
        )

6.EventBridge Rule类示例

import boto3
from botocore.config import Config
from lambda_action import Lambda
class Event:
    def __init__(self, region):
        self.client = boto3.client('events',config=Config(region_name=region))
        self.region = region


        
        
    def list_events(self):
        list_resp = self.client.list_rules()
        event_rules = []
        for i in range(len(list_resp['Rules'])):
            event_rule_info = {}
            event_rule_info['rule_name'] = list_resp['Rules'][i]['Name']
            event_rule_info['rule_stat'] = list_resp['Rules'][i]['State']
            event_rule_info['rule_cron'] = list_resp['Rules'][i]['ScheduleExpression']
            
            event_rules.append(event_rule_info)
        return {
        'headers': {
            "Content-Type": "application/json"
        },
        'statusCode': 200,
        'body': event_rules
        }


    def remove_target(self):
        remove_tg_resp = self.client.remove_targets(
            Rule  = self.rule_name,
            EventBusName = 'default',
            Ids=[
                self.tg_id,
            ],
            Force = True
        )

    def create_rule(self, rule_name, region, stat, cron, tg_id, tg_arn):
        self.region = region
        self.rule_name = rule_name
        self.rule_stat = stat
        self.tg_id = tg_id
        self.tg_arn = tg_arn
        self.cron = cron
        fc = Lambda(region)
        create_rule_resp = self.client.put_rule(
            Name=self.rule_name,
            ScheduleExpression=self.cron,
            State=self.rule_stat,
            EventBusName='default'
        )
        return create_rule_resp

    def delete_rule(self, rule_name, tg_id):
        self.rule_name = rule_name
        self.tg_id = tg_id
        Event.remove_target(self)
        delete_rule_resp = self.client.delete_rule(
            Name=self.rule_name,
            EventBusName='default',
            Force=True
        )
        return delete_rule_resp

    def disable_rule(self, rule_name):
        self.rule_name = rule_name
        dis_rule_resp = self.client.disable_rule(
            Name=self.rule_name,
            EventBusName='default'
        )
        return dis_rule_resp

    def enable_rule(self, rule_name):
        self.rule_name = rule_name
        en_rule_resp = self.client.enable_rule(
            Name=self.rule_name,
            EventBusName='default'
        )
        return en_rule_resp