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

如何实现AWS SNS推送消息内列表项逐行换行显示

EC2标签校验Lambda邮件换行问题修复方案

问题根因

Python 中直接将列表传入字符串格式化方法时,会调用列表默认的字符串转换规则,输出带方括号、元素用逗号分隔的单行文本,无法实现逐行换行效果。print(*list, sep='\n')仅向控制台输出内容,返回值为None,无法用于字符串拼接场景。
另外原代码存在两处隐性问题:

  • 模板占位符写为{unknowngvalues},但format()传入的参数键名为unknownvalues,运行时会触发KeyError
  • SNS发布逻辑中额外拼接了str(return_value),会把无格式的原始字典内容追加到邮件末尾,打乱排版

修复方法

核心逻辑是在传入格式化参数前,先将所有列表转换为换行分隔的字符串,同时对空列表做友好展示处理,对齐排版:

  1. 新增简单的列表格式化函数,空列表返回「无异常」,非空列表将每个条目转为带缩进的换行列表项,和前面的标签文本对齐
  2. 修正模板占位符和传参的变量名不一致问题
  3. 删除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>,缩进用&nbsp;实现即可,纯文本邮件直接使用\n就能被SNS和邮件客户端正常识别换行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:48:16