如何使用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
相关产品推荐
相关产品推荐

