GCP Pub/Sub触发Cloud Function校验异常触发邮件告警的问题
问题原因
现有代码通过[key]强制读取字典中可能不存在的键:当Pub/Sub消息未携带attributes字段,或者缺少transaction_id/refined_paths属性时,会在变量赋值阶段直接抛出异常,无法执行后续的非空校验逻辑,这是运行报错的核心原因。
修复后实现代码
使用dict.get()方法安全取值,键不存在时返回默认空值,再统一做非空校验即可满足需求:
import base64 def hello_pubsub(event, context): # 安全读取消息正文,不存在则默认解码为空字符串 pubsub_message = base64.b64decode(event.get('data', b'')).decode('utf-8') # 安全读取属性集合,不存在则默认为空字典 pubsub_attributes = event.get('attributes', {}) # 安全读取指定属性,不存在则默认为空字符串 transaction_id = pubsub_attributes.get('transaction_id', '') refined_paths = pubsub_attributes.get('refined_paths', '') # 非空校验,任意字段为空则抛出异常触发函数执行失败 if not all([pubsub_message, transaction_id, refined_paths]): raise RuntimeError("消息正文、transaction_id、refined_paths不得为空")
邮件告警配置
无需额外开发代码,通过GCP原生告警规则即可实现函数失败自动发邮件:
- 进入目标Cloud Function的「告警」标签页,点击「创建告警策略」
- 指标选择
Cloud Function > 函数 > 执行失败次数,筛选当前的目标函数 - 阈值配置为
1,统计周期选择1分钟 - 通知渠道选择「电子邮件」,添加告警接收邮箱即可。函数执行失败时会自动触发邮件推送。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

