如何将AWS SNS部署通知转为Slack纯文本及WEBHOOK_USERNAME配置疑问
问题解决:Lambda发送Slack简洁部署通知及WEBHOOK_USERNAME说明
核心问题分析
当前Slack收到完整JSON是因为代码直接将SNS传递的JSON格式消息作为Slack文本发送,而自动触发时SNS的Message字段本身就是嵌套的JSON字符串。手动测试时你传入的是纯文本消息,所以显示正常。
解决方案代码
修改Lambda代码,直接指定固定文本,并修正注释语法,同时明确WEBHOOK_USERNAME的作用:
#!/usr/bin/python3.7 import urllib3 import json http = urllib3.PoolManager() def lambda_handler(event, context): print(event) url = "https://hooks.slack.com/services/web___hook__url" msg = { "channel": "#deploy-notifications", # 你的Slack频道 "username": "Deployment Bot", # 自定义发送者名称,会在Slack显示为消息发送方 "text": "Code deployment success.", # 固定显示简洁文本 "icon_emoji": ":white_check_mark:" # 可选:添加图标让消息更直观 } encoded_msg = json.dumps(msg).encode('utf-8') resp = http.request('POST', url, body=encoded_msg) print({ "status_code": resp.status, "response": resp.data })
关键说明
- WEBHOOK_USERNAME修改问题:这个字段是Slack消息的发送者显示名称,你可以改成任意有意义的名称(比如"Deployment Notifier"、"AWS CICD Bot"),不修改的话会默认显示"WEBHOOK_USERNAME",建议修改为更清晰的名称便于识别消息来源。
- 自动触发显示JSON的原因:自动触发时,SNS传递的
event['Records'][0]['Sns']['Message']是序列化后的JSON字符串(包含部署详情),直接作为Slack文本就会显示成JSON格式。改成固定文本后就会只显示你想要的简洁消息。 - 代码修正点:原代码用了
//注释,Python只支持#注释,已修正;同时移除了对event中Message的依赖,直接设置固定文本。
内容的提问来源于stack exchange,提问作者Santosh
相关产品推荐
相关产品推荐

