AWS Lambda:找出(并禁用)自己的事件源?
AWS Lambda: Find out (and disable) own event source?
lambda 函数是否可以停用自己的事件源(通过 EventBridge 每月触发一次)而无需手动 entering/configuring 某些东西?
我考虑过使用 update_event_source_mapping 实现它:
response = S3_CLIENT.update_event_source_mapping(
UUID = event_source_UUID,
FunctionName = context.invoked_function_arn,
Enabled = False,
)
...但是要使用它,我显然需要 event_source_UUID 作为参数。
为了获得 event_source_UUID 我尝试了这个:
lambdaClient = boto3.client('lambda')
response = lambdaClient.list_event_source_mappings(
FunctionName=context.invoked_function_arn,
EventSourceArn = "arn:aws:events:eu-west-1:xyz:rule/TriggerMiddleOfMonth"
)
print(response)
这个错误是怎么回事:
调用 ListEventSourceMappings 操作时发生错误 (InvalidParameterValueException):无法识别的事件源。不支持的来源 arn
这在某种程度上也是可以理解的,因为 documentation 表示 ListEventSource 将只接受来自的事件源:
- Amazon Kinesis - 数据流或流消费者的 ARN。
- Amazon DynamoDB 流 - 流的 ARN。
- Amazon 简单队列服务 - 队列的 ARN。
- Amazon Managed Streaming for Apache Kafka - 集群的 ARN。
但是我现在如何找到实际的事件源(= link 到事件桥)?
我真的必须反过来,轮询我帐户中存在的所有事件源条目,然后检查它们是否有 link 到我的 lambda 函数?
PS:
我也没弄清楚,如何手动获取这个UUID。
假设:
- 受影响的规则只触发了这个感兴趣的功能(该规则没有触发其他功能)
- 只有一个规则触发了感兴趣的函数
答案:
rules = eventClient.list_rule_names_by_target(TargetArn=context.invoked_function_arn)
response = eventClient.disable_rule(Name=rules["RuleNames"][0])
这当然要求您的 lambda 函数角色具有对 EventBridge 的完全写入权限(您可能不想要)或者您附加专用策略
当然,enablin.g 规则再次使用相同的方法使用“enable_rule”
lambda 函数是否可以停用自己的事件源(通过 EventBridge 每月触发一次)而无需手动 entering/configuring 某些东西?
我考虑过使用 update_event_source_mapping 实现它:
response = S3_CLIENT.update_event_source_mapping(
UUID = event_source_UUID,
FunctionName = context.invoked_function_arn,
Enabled = False,
)
...但是要使用它,我显然需要 event_source_UUID 作为参数。
为了获得 event_source_UUID 我尝试了这个:
lambdaClient = boto3.client('lambda')
response = lambdaClient.list_event_source_mappings(
FunctionName=context.invoked_function_arn,
EventSourceArn = "arn:aws:events:eu-west-1:xyz:rule/TriggerMiddleOfMonth"
)
print(response)
这个错误是怎么回事:
调用 ListEventSourceMappings 操作时发生错误 (InvalidParameterValueException):无法识别的事件源。不支持的来源 arn
这在某种程度上也是可以理解的,因为 documentation 表示 ListEventSource 将只接受来自的事件源:
- Amazon Kinesis - 数据流或流消费者的 ARN。
- Amazon DynamoDB 流 - 流的 ARN。
- Amazon 简单队列服务 - 队列的 ARN。
- Amazon Managed Streaming for Apache Kafka - 集群的 ARN。
但是我现在如何找到实际的事件源(= link 到事件桥)?
我真的必须反过来,轮询我帐户中存在的所有事件源条目,然后检查它们是否有 link 到我的 lambda 函数?
PS:
我也没弄清楚,如何手动获取这个UUID。
假设:
- 受影响的规则只触发了这个感兴趣的功能(该规则没有触发其他功能)
- 只有一个规则触发了感兴趣的函数
答案:
rules = eventClient.list_rule_names_by_target(TargetArn=context.invoked_function_arn)
response = eventClient.disable_rule(Name=rules["RuleNames"][0])
这当然要求您的 lambda 函数角色具有对 EventBridge 的完全写入权限(您可能不想要)或者您附加专用策略
当然,enablin.g 规则再次使用相同的方法使用“enable_rule”