You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda如何查找并禁用自身的EventBridge事件源触发器

解决方案

核心原因

你之所以查不到对应事件源UUID,是因为EventBridge规则触发Lambda的关联关系保存在EventBridge侧,不属于Lambda服务定义的「事件源映射」范畴,Lambda的list_event_source_mappings接口确实只支持Kinesis、DynamoDB流、SQS、MSK这几类服务的事件源,没法查到EventBridge的关联。

实现方案

不需要反向遍历所有账号资源,直接操作EventBridge的服务接口即可完成规则禁用,步骤如下:

1. 配置Lambda执行角色权限

先给你的Lambda执行角色添加以下权限(示例IAM策略):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "events:ListRules",
                "events:ListTargetsByRule",
                "events:DisableRule"
            ],
            "Resource": "*"
        }
    ]
}

2. 代码实现

分两种场景:

场景1:已知EventBridge规则名称、所属事件总线

直接调用disable_rule接口即可,代码示例:

import boto3

events_client = boto3.client('events', region_name='eu-west-1')
# 禁用规则
events_client.disable_rule(
    Name='TriggerMiddleOfMonth',
    EventBusName='default' # 自定义总线请替换成对应名称
)

场景2:不知道规则名称,自动查找关联当前Lambda的EventBridge规则

遍历当前区域的EventBridge规则,匹配目标为当前Lambda的规则后禁用:

import boto3

def lambda_handler(event, context):
    events_client = boto3.client('events', region_name='eu-west-1')
    current_lambda_arn = context.invoked_function_arn

    # 分页获取所有规则
    paginator = events_client.get_paginator('list_rules')
    for page in paginator.paginate(EventBusName='default'):
        for rule in page['Rules']:
            rule_name = rule['Name']
            # 查规则的所有目标
            targets = events_client.list_targets_by_rule(
                Rule=rule_name,
                EventBusName='default'
            )['Targets']
            # 匹配目标是否为当前Lambda
            for target in targets:
                if target['Arn'] == current_lambda_arn:
                    # 找到对应规则,禁用
                    events_client.disable_rule(
                        Name=rule_name,
                        EventBusName='default'
                    )
                    print(f"已禁用关联规则:{rule_name}")

注意事项

  • EventBridge是区域级服务,调用接口的区域要和规则部署区域一致
  • 如果使用了自定义事件总线,需要把代码里的EventBusName替换成对应总线名称
  • 如果你的账号下EventBridge规则数量极多,可以给规则加特定标签,先过滤标签再遍历,减少查询次数

内容的提问来源于stack exchange,提问作者and0r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:24:01