如何实现AWS SNS推送消息内列表项逐行换行显示
EC2标签校验Lambda邮件换行问题修复方案
问题根因
Python 中直接将列表传入字符串格式化方法时,会调用列表默认的字符串转换规则,输出带方括号、元素用逗号分隔的单行文本,无法实现逐行换行效果。print(*list, sep='\n')仅向控制台输出内容,返回值为None,无法用于字符串拼接场景。
另外原代码存在两处隐性问题:
- 模板占位符写为
{unknowngvalues},但format()传入的参数键名为unknownvalues,运行时会触发KeyError - SNS发布逻辑中额外拼接了
str(return_value),会把无格式的原始字典内容追加到邮件末尾,打乱排版
修复方法
核心逻辑是在传入格式化参数前,先将所有列表转换为换行分隔的字符串,同时对空列表做友好展示处理,对齐排版:
- 新增简单的列表格式化函数,空列表返回「无异常」,非空列表将每个条目转为带缩进的换行列表项,和前面的标签文本对齐
- 修正模板占位符和传参的变量名不一致问题
- 删除SNS消息中多余的原始字典拼接逻辑
修正后完整核心代码
import boto3 ec = boto3.client('ec2') sns_client = boto3.client('sns') def format_tag_list(item_list): # 空列表返回友好提示 if not item_list: return "无异常" # 换行后补对应空格对齐排版,每个条目前加列表短横线 indent = " " * 23 return "\n" + "\n".join([f"{indent}- {item}" for item in item_list]) def lambda_handler(event, context): reservations = ec.describe_instances().get('Reservations', []) return_value = { 'missingtagkeys': [], 'missingtagvalues': [], 'incorrecttagkeys': [], 'incorrecttagvalues': [], 'unknowntagvalues': [] } # 此处保留你原有的EC2实例遍历、标签校验逻辑,给对应列表追加异常条目即可 incorrect_keys = return_value['incorrecttagkeys'] incorrect_values = return_value['incorrecttagvalues'] missing_keys = return_value['missingtagkeys'] missing_values = return_value['missingtagvalues'] unknown_value = return_value['unknowntagvalues'] email_body = """ Here is a list of EC2 tags that need review. Please correct the tags using the approved values list located below <insert site here>. ------------------------------------------------------------------------------------ Summary of incorrect tags keys and/or values: ------------------------------------------------------------------------------------ Incorrect Tag Keys : {incorrectkeys} Incorrect Tag Values : {incorrectvalues} ------------------------------------------------------------------------------------ Summary of missing tags keys and/or values: ------------------------------------------------------------------------------------ Missing Tag Keys : {missingkeys} Missing Tag Values : {missingvalues} ------------------------------------------------------------------------------------ Summary of unknown values: ------------------------------------------------------------------------------------ Unknown Tag Values : {unknownvalues} ------------------------------------------------------------------------------------ """.format( incorrectkeys = format_tag_list(incorrect_keys), incorrectvalues = format_tag_list(incorrect_values), missingkeys = format_tag_list(missing_keys), missingvalues = format_tag_list(missing_values), unknownvalues = format_tag_list(unknown_value) ) sns_client.publish( TopicArn = 'arn:aws:sns', Subject = 'Incorrect Tags Detected', Message = email_body.strip(), ) return return_value
修复后展示效果
异常条目会逐行展示,排版整齐,示例片段如下:
------------------------------------------------------------------------------------ Summary of unknown values: ------------------------------------------------------------------------------------ Unknown Tag Values : - i-abc has unknown for it's builder tag value. - i-def has unknown for it's builder tag value. - i-ghi has unknown for it's builder tag value. ------------------------------------------------------------------------------------
如果你需要发送HTML格式的邮件,只需要把格式化函数里的换行符
\n替换为<br>,缩进用 实现即可,纯文本邮件直接使用\n就能被SNS和邮件客户端正常识别换行。
内容的提问来源于stack exchange,提问作者skyfire123
相关产品推荐
相关产品推荐

