如何生成AWS SNS告警触发MS Teams对象加载失败通知及解决Lambda报错
问题根因
- 核心错误是对
Subject参数使用了错误的传值格式:AWS SNS的Publish接口中,Subject仅支持传入纯UTF-8文本字符串,最大长度不超过100字符,不支持JSON结构,也不需要序列化。你当前代码将Subject序列化为JSON字符串后传入,直接触发了InvalidParameter异常。 - 额外可排查的问题点:
- 你当前填写的
TopicArn格式不符合AWS SNS标准规范,正确格式应为arn:aws:sns:<区域ID>:<AWS账号ID>:<主题名称>,请替换为你实际创建的SNS主题完整ARN。 - 请确认Lambda执行角色已附加包含
sns:Publish权限的IAM策略,且资源范围覆盖你使用的SNS主题ARN。 - 如果你的SNS主题直接绑定了MS Teams入站Webhook作为HTTPS订阅,还需要确认Message内容符合Teams接收的消息格式要求。
- 你当前填写的
修正后的代码
import boto3 import json # 不要用object作为参数名,object是Python内置关键字,避免语法冲突 def sns_alert(object_name): '''Sends SNS Teams alert failed to load object''' try: message = f'{object_name} failed to load' subject = f'{object_name} load failed' # 长度控制在100字符以内即可 sc = boto3.client(service_name='sns') response = sc.publish( TopicArn = '替换为你实际的SNS主题ARN', Message = json.dumps({'default': message}), # 不需要双层序列化,直接传入消息字符串即可 Subject = subject, # 直接传纯文本字符串,不要做JSON序列化 MessageStructure = 'json' ) return response except Exception as e: raise e
验证步骤
- 替换代码中的SNS主题ARN为实际值后,先在Lambda测试控制台执行函数,确认无参数报错。
- 确认SNS主题的HTTPS订阅已正确配置MS Teams的入站Webhook地址,且订阅状态为已确认。
- 触发测试告警,验证Teams通道可以正常收到通知。
内容的提问来源于stack exchange,提问作者RockClimbCoder91
相关产品推荐
相关产品推荐

