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

AWS Lambda使用Slack Webhook发告警无报错无通知问题求助

问题根因定位
  • 致命逻辑错误:Send2Slack函数内部加了if __name__ == '__main__'判断。AWS Lambda运行时执行lambda_handler作为入口,此时__name__的取值为当前模块名而非__main__,因此该判断下所有发送Slack的逻辑全程不会执行,函数空跑自然无报错也无消息发出。
  • 请求头逻辑错误:手动计算Content-Length请求头的逻辑错误。sys.getsizeof(slack_data)计算的是Python字典对象在内存中的占用大小,并非JSON序列化后实际发送的字节长度,手动传入错误的长度值会导致Slack服务端无法正常解析请求。
  • 潜在依赖问题:AWS Lambda默认Python运行环境未预装requests库,你当前没遇到导入报错是因为上层判断直接跳过了所有用到requests的逻辑,后续修复后如果没有提前打包依赖会触发报错。
  • 格式不规范问题:Slack消息结构里的short字段应为布尔值false而非字符串"false",虽不影响消息发送但可能导致排版不符合预期。
修复方案

完整修复后代码

import json
import requests

def Send2Slack(message):
    print('inside slack function')
    # 替换为你实际的Slack webhook地址
    url = "webhook_URL"
    title = "New Incoming Message"
    slack_data = {
        "username": "abc",
        "channel" : "xyz",
        "attachments": [
            {
                "color": "#ECB22E",
                "fields": [
                    {
                        "title": title,
                        "value": message,
                        "short": False,
                    }
                ]
            }
        ]
    }
    # 不需要手动传Content-Length,requests会自动计算生成
    headers = {'Content-Type': "application/json"}
    response = requests.post(url, data=json.dumps(slack_data), headers=headers)
    if response.status_code != 200:
        raise Exception(response.status_code, response.text)

def lambda_handler(event, context):
    output = "Hello Slack "
    Send2Slack(output)

补充说明

  • 如果不想额外打包requests依赖,可以使用Python标准库urllib实现请求发送,避免额外打包操作
  • 代码修复后需要将requests及其依赖打包到Lambda部署包,或者通过Lambda层挂载requests库,否则会触发导入报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:08