为什么在lambda函数中看不到日志?

时间:2018-08-20 18:54:48

标签: amazon-web-services amazon-s3 aws-lambda aws-cli

我一直在徒劳地尝试查看lambda函数的日志。无论我看到什么:

AWS Lambda Logs Error

为清楚起见,lambda函数正常运行。我根本看不到日志。

我已经多次重新创建该函数,以确保不是我意外禁用了禁用日志记录的设置。

我的步骤:

  1. 从AWS Lambda函数页面创建一个新函数。我正在使用nodejs 8.10,但即使使用6.x版本,它似乎也会失败。
  2. 将具有我的功能的zip文件(还包括node_modules目录,package.json和package-lock.json)上传到S3并以文件名testbucketthumbnails.zip
  3. 使用此命令从S3:aws lambda update-function-code --function-name transcode-v2 --s3-bucket mytestbucket --s3-key thumbnails.zip发布我的lambda函数。
  4. 我可以使用示例数据和“测试”按钮来测试我的功能。
  5. 我还可以从CLI调用它,它似乎“起作用”(因为它可以运行)

当我进入云日志时,我总是看到此消息:There was an error loading Log Streams. Please try again by refreshing this page.我尝试过两次重新创建该函数,但这不能解决。

有人知道这是怎么回事吗?该功能似乎在测试中正常工作(意味着,我在测试日志对话框中看到了日志),以及当我从命令行调用时。但是,除了该错误之外,没有任何东西进入云日志页面。

我可以看到调用是从AWS触发的。

AWS Invocations

1 个答案:

答案 0 :(得分:1)

创建AWS角色后,您必须提供供Lambda函数使用的 IAM角色。与该角色相关联的权限将授予对Lambda函数所需的AWS服务和资源的访问。

有一个默认的AWSLambdaBasicExecutionRole提供:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

这些权限允许Lambda函数将日志信息写入Amazon CloudWatch Logs。

还有其他可用的角色,例如AWSLambdaExecute

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

因此,请使用这些预先提供的角色之一,或向您的Lambda函数使用的角色添加类似的权限。