我的API(Python)部署在Amazon Lambda上。问题是,当我请求我的API时,我收到内部服务器错误。我可以拖尾Lambda日志,但我没有看到代码崩溃的实际错误或堆栈跟踪。当我拖尾日志时,我得到以下输出。
START RequestId: 62341bgd-6231-11e8-8c5b-25793532a32u Version: $LATEST
END RequestId: 62341b0d-6231-1128-8r5b-2b793032a3ed
REPORT RequestId: 6234te0b-6rte-aaa8-au5a-21t93132r3rt Duration: 0.46 ms
如何查看python api的实际堆栈跟踪以进行调试?
答案 0 :(得分:2)
Lambda总是尝试将Python堆栈跟踪写入CloudWatch。确保您的函数具有所需的权限:
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:eu-west-1:123456789012:*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "*"
}
答案 1 :(得分:1)
如果您使用Lambda_basic_execution角色,python中的简单打印将在cloudwatch中显示日志。
答案 2 :(得分:0)
初步调查:
默认情况下,lambda函数通过我的API名称在CloudWatch中创建日志组。例如,/ aws / lambda / my_api_name显示类似的输出。
START RequestId: 62341bgd-6231-11e8-8c5b-25793532a32u Version: $LATEST
END RequestId: 62341b0d-6231-1128-8r5b-2b793032a3ed
REPORT RequestId: 6234te0b-6rte-aaa8-au5a-21t93132r3rt Duration: 0.46 ms
问题解决:
我为我的云监视创建了一个服务角色(AWS已经提供的CloudWatch的所有权限的默认策略),然后将此角色放入我的API中。我跟着这个approach。但是,另一个步骤可能是将新创建的执行日志与默认日志组合在一起,这样我们就有一个日志组可以尾随。