【问题标题】:AWS Lambda@Edge not loggingAWS Lambda@Edge 没有记录
【发布时间】:2019-11-21 04:50:06
【问题描述】:

我将查看器请求和源响应 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/*"
        }
    ]
}

编辑:

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

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

【问题讨论】:

  • 你能分享你的角色 AWSServiceRoleForCloudFrontLogger 吗?
  • @matesio 当然,在上面添加。
  • AWS 支持建议的策略是否意味着附加到将 logger.cloudfront.amazonaws.com 作为受信任实体的新角色?如果我理解正确,这是对默认 AWSServiceRoleForCloudFrontLogger 角色的一种扩展替代,对吧?
  • 为了回答我之前的建议,需要为 Lambda 的执行角色设置建议的策略,然后日志开始工作!
  • 非常感谢,他们真的应该在浪费了很多时间的文档中强调这一点。

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


【解决方案1】:

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

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

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

说明

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

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

【讨论】:

  • 感谢您的回答。你说得对。实际上,我自己想通了这一点,并且在授予执行角色的策略更多权限后,它开始起作用。我目前正在与 AWS 支持人员交谈,以确切了解为什么需要这样做,一旦我得到答案,我会在此处发布。
  • 更新了解释,让我知道这是否有意义!
  • 作为参考,我已在原帖中发布了 AWS 支持建议的固定角色权限。
猜你喜欢
  • 2019-01-15
  • 1970-01-01
  • 2018-06-17
  • 2019-02-04
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2022-06-15
  • 2022-01-01
相关资源
最近更新 更多