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

如何生成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:24:04