AWS Lambda@Edge 不记录

mus*_*ter 15 amazon-web-services amazon-cloudfront aws-lambda aws-lambda-edge

我已将查看器请求和源响应 Lambda 函数部署到 CloudFront 分配,这些函数正在触发,但未记录到 CloudWatch。我花了大量时间研究这个主题,并浏览了其他帖子的所有建议,包括:

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

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

在我的一生中,我无法弄清楚如何将所有请求(成功和失败)记录到 CloudWatch,其中包含使用 console.log() 的调试语句。

AWSServiceRoleForCloudFrontLogger 包含一个策略AWSCloudFrontLogger

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:/aws/cloudfront/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

编辑:

以下是 AWS 支持建议的 AWS 角色。我可以确认这有效并解决了问题。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}```
Run Code Online (Sandbox Code Playgroud)

vip*_*l91 5

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

您能否仔细检查 Lambda 函数执行角色权限?

相关链接:无法让 AWS Lambda 函数将日志(文本输出)记录到 CloudWatch

解释

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

  1. 您放入 Lambda 函数中的日志(使用 console.log),由于这些日志将由该函数发布到 CloudWatch,因此函数执行角色应该具有CloudWatch 的权限。无论谁触发 Lambda 函数,都是如此。
  2. 现在出现了 L@E,有时您可能最终会以按照 CloudFront 无效的方式修改请求/响应。在这些场景中,只有 ClodFront 知道您弄乱的信息(您的 Lambda 函数不知道这一点),并且它以日志的形式将这些信息发布到 CloudWatch。现在,由于这是一个不同的实体,因此它需要拥有自己的权限才能将日志推送到 CloudWatch(您已通过 AWSServiceRoleForCloudFrontLogger 提供)。