8

我的 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 的实际堆栈跟踪以进行调试?

4

4 回答 4

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": "*"
    }
于 2018-06-13T12:35:32.253 回答
2

如果您使用的是 Lambda_basic_execution 角色,python 中的简单打印将在 cloudwatch 中显示日志。

于 2018-06-14T16:59:53.070 回答
1

我的日志已启用,但它仍然没有打印任何内容,它也没有在 CloudWatch 中显示添加的日志。但是当我评论一个试图从 dynamo db 打印太多数据的打印语句时,它又开始工作了,所以可能在你的代码中的其他地方你使用 print 来打印大量数据,所以禁用它

您不能打印太多数据,或者它既不会在测试中打印任何内容,也不会在 CloudWatch 中添加日志

于 2021-08-16T19:07:20.147 回答
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 已经为云手表提供的所有权限的默认策略),然后将此角色放入我的 API。我遵循了这种方法。但是,另一个步骤可以将新创建​​的执行日志与默认日志组合起来,这样我们就有一个日志组可以跟踪。

于 2018-06-15T09:37:26.467 回答