AWS Lambda @ Edge无法记录

时间:2019-07-11 12:52:03

标签: amazon-web-services aws-lambda amazon-cloudfront aws-lambda-edge

我已将查看器请求和原始响应Lambda函数部署到CloudFront发行版,这些函数正在触发,但未登录到CloudWatch。我花了很多时间研究这个主题,并浏览了其他帖子中的所有建议,包括:

  • 检查所有区域的日志,因为我知道它们将在labmda @ edge函数运行的区域中创建CloudWatch日志。没有任何人登录。
  • 我已经检查了AWSServiceRoleForCloudFrontLogger角色是否存在。

有趣的是,当我有意地将错误编码到Lambda函数之一中时,我确实在名为/aws/cloudfront/LambdaEdge/<cloudfront distribution id>的组中创建了包含错误日志的日志,但是这里的console.log语句没有输出。

我一生都无法解决如何使用console.log()将包含调试语句的所有请求(成功和失败)记录到CloudWatch的问题。

AWSServiceRoleForCloudFrontLogger包含单个策略AWSCloudFrontLogger

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

1 个答案:

答案 0 :(得分:1)

问题很可能是Lambda没有将日志输出到CloudWatch的权限。

您可以再次检查Lambda函数执行角色权限吗?

相关链接:Can't get AWS Lambda function to log (text output) to CloudWatch

说明

所以这里有两种日志,因此您必须在两个不同的地方提供对CloudWatch的权限。

  1. 您放入Lambda函数中的日志(使用console.log),因为这些日志将由函数发布到CloudWatch,所以函数执行角色应该对CloudWatch拥有permission。无论是谁触发Lambda函数,这都是正确的。
  2. L @ E现在来了,有时您可能最终会以not valid as per CloudFront的方式修改请求/响应。在这些情况下,只有ClodFront知道您搞砸了(您的Lambda函数不知道),并且将这些知识以日志形式发布到CloudWatch。现在,由于这是一个不同的实体,它需要拥有自己的permissions才能将日志推送到CloudWatch(您已通过AWSServiceRoleForCloudFrontLogger提供)。