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

如何使用Lambda Powertools正确记录AWS Lambda事件?

解决Lambda Powertools事件日志JSON格式输出问题

核心解决方法

Lambda Powertools的所有事件数据类(如SNSEvent、EventBridgeEvent)都继承自DictWrapper,内置了raw_event属性直接存储原始事件的字典结构,配合json.dumps()就能输出JSON格式的事件内容。

代码修改示例

先导入json模块,然后把你原来的日志行替换为:

import json

# 打印完整原始事件的JSON格式
LOGGER.debug(f"Event: {json.dumps(event.raw_event)}")

如果仅需要打印records部分,由于event.records是生成器对象,需先转为列表再序列化:

LOGGER.debug(f"Records: {json.dumps(list(event.records))}")

完整修改后的代码

import json
from aws_lambda_powertools import Logger
from aws_lambda_powertools.utilities.data_classes import SNSEvent
from aws_lambda_powertools.utilities.typing import LambdaContext

LOGGER = Logger()

@LOGGER.inject_lambda_context(log_event=True)
@event_source(data_class=SNSEvent)
def handler(event: SNSEvent, context: LambdaContext) -> None:  # pylint: disable=W0613
    """Lambda function invoked by Image builder SNS topic, putting Image
    builder ami-id in parameter store.
    :param event: SNS message containing Image Builder build results
    :return:
    """
    # 输出JSON格式的完整原始事件
    LOGGER.debug(f"Event: {json.dumps(event.raw_event)}")
    
    for record in event.records:
        message = record.sns.message
        LOGGER.info(f"Message: {message}")
        process_sns_event(message)
        return None

额外提示

你代码中的@LOGGER.inject_lambda_context(log_event=True)参数已经会自动在CloudWatch日志中输出原始事件(日志条目带INJECTED_LAMBDA_CONTEXT标记),如果只是需要查看原始事件,其实可以不用手动添加日志行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:15:28