My 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 的实际堆栈跟踪?
Lambda 总是尝试将 Python 堆栈跟踪写入 CloudWatch。确保您的函数具有所需的权限:
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:eu-west-1:123456789012:*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "*"
}
如果您使用的是Lambda_basic_execution角色,则在python中简单打印将在cloudwatch中显示日志。
我的日志已启用,但仍然没有打印任何内容,也没有在 CloudWatch 中显示添加的日志。 但是当我评论一个试图从 dynamo DB 打印太多数据的 print 语句时,它又开始工作了,所以也许在你的代码中的其他地方你使用 print 来打印大量数据,所以禁用它
您不能打印太多数据,否则它既不会在测试中打印任何内容,也不会在 CloudWatch 中添加日志
初步调查:
默认情况下,lambda 函数在 CloudWatch 中按我的 API 名称创建日志组。例如,/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 中。我遵循了这种方法。但是,另一个步骤可能是将新创建的执行日志与默认执行日志合并,以便我们有一个日志组要跟踪。
我看到这是一个有点老的问题。但是只是在这里发表评论,因为我在使用Python 3.9时遇到了同样的问题。这就是我解决问题的方式。使用 Lambda 时,请使用:
logger = logging.getLogger()
logger.setLevel(logging.INFO)
使用时不起作用:
logger = logging.getLogger()
logging.basicConfig(level=logging.INFO)