如何修复AWS Lambda提取Trust Advisor数据时的日志错误及代码问题
解决AWS Lambda提取Trust Advisor数据报错及添加Traceback日志
一、在else语句块添加Traceback日志
- 先在代码开头导入
traceback模块:
import traceback import boto3 # 其他必要的导入模块
- 修改异常捕获逻辑,确保输出完整调用栈:
假设你的原有代码片段类似:
try: # 获取Trust Advisor检查数据的逻辑 checks = support_client.describe_trusted_advisor_checks(language='en') except Exception as e: print("unable to append checks") else: # 处理checks并上传S3的逻辑
修改为:
try: # 获取Trust Advisor检查数据的逻辑 checks = support_client.describe_trusted_advisor_checks(language='en') except Exception as e: print(f"unable to append checks: {str(e)}") # 打印完整错误栈到Lambda日志 print("完整错误追踪:") print(traceback.format_exc()) else: try: # 原else块中的处理逻辑(比如追加数据、上传S3) your_data_list.append(checks) # 上传S3的代码 s3_client.put_object(Bucket='your-bucket', Key='trust-advisor-data.json', Body=json.dumps(your_data_list)) except Exception as e: print(f"else块执行错误: {str(e)}") print("完整错误追踪:") print(traceback.format_exc())
这样不管是try块捕获的错误,还是else块内的错误,都会输出完整的traceback,帮你定位具体代码行的问题。
二、排查“unable to append checks”错误的常见方向
- IAM权限缺失:Lambda执行角色必须包含以下权限:
support:DescribeTrustedAdvisorCheckssupport:DescribeTrustedAdvisorCheckResults3:PutObject(如果要上传S3)
检查角色的权限策略,确保这些权限被正确添加。
- Trust Advisor API区域限制:该API仅支持
us-east-1区域,初始化客户端时必须指定:
support_client = boto3.client('support', region_name='us-east-1')
- API调用限流:AWS Support API有调用频率限制,短时间内多次触发Lambda会触发限流,日志中会出现
Throttling相关提示。 - 数据格式问题:如果尝试append的对象不是列表类型,或者
checks返回的数据格式不符合预期(比如返回None、非可迭代对象),会导致append操作失败。可以在代码中添加打印语句,查看checks的实际结构:
print(f"Checks数据结构: {type(checks)}, 内容: {checks}")
内容的提问来源于stack exchange,提问作者obey
相关产品推荐
相关产品推荐

