【问题标题】:Amazon lambda does not show python logsAmazon lambda 不显示 python 日志
【发布时间】:2018-11-22 20:32:26
【问题描述】:

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

【问题讨论】:

标签: python amazon-web-services aws-lambda serverless aws-serverless


【解决方案1】:

Lambda 总是尝试将 Python 堆栈跟踪写入 CloudWatch。确保您的函数具有所需的权限:

    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Resource": "arn:aws:logs:eu-west-1:123456789012:*"
    },
    {
        "Effect": "Allow",
        "Action": "logs:CreateLogGroup",
        "Resource": "*"
    }

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这肯定适用于 print 语句,但为什么 log.info 不能以同样的方式工作呢?
    【解决方案3】:

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

    你不能打印太多数据,否则它既不会在测试中打印任何东西,也不会在 CloudWatch 中添加日志

    【讨论】:

      【解决方案4】:

      初步调查:

      默认情况下,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。我关注了这个approach。但是,另一个步骤可以是将新创建的执行日志与默认日志组合起来,这样我们就有一个日志组要尾随。

      【讨论】:

        猜你喜欢
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        相关资源
        最近更新 更多