AWS Lambda@Edge无法记录日志

21

我已经将viewer-request和origin-response Lambda函数部署到CloudFront分配中,它们正在运行,但没有记录到CloudWatch。我花了很多时间研究这个问题,并且运行了所有其他帖子的建议,包括:

  • 检查所有区域的日志,因为我知道它们的CloudWatch日志将在lambda@edge函数运行的区域创建。但在任何一个区域都没有找到日志。
  • 我已确认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/*"
        }
    ]
}

编辑:

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

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

你能分享一下你的 AWSServiceRoleForCloudFrontLogger 角色吗? - matesio
@matesio 当然,已添加以上内容。 - mustdobetter
AWS支持建议的策略是要附加到一个新角色,该角色将logger.cloudfront.amazonaws.com作为受信任实体吗?如果我理解正确,这是默认的AWSServiceRoleForCloudFrontLogger角色的一种扩展替代,对吗? - mj3c
1
回答我之前的评论,需要为Lambda的执行角色设置所提议的策略,然后日志才会开始工作! - mj3c
1
非常感谢,他们应该在文档中特别强调这一点,我浪费了很多时间。 - Suraj Jain
1个回答

5
最可能的问题是Lambda没有权限将日志输出到CloudWatch。请确认Lambda函数执行角色权限是否正确。
相关链接:无法让AWS Lambda函数将文本输出记录到CloudWatch 解释:
这里有两种类型的日志,因此您需要在两个不同的位置上向CloudWatch提供权限。
  1. 您在Lambda函数中放置的日志(使用console.log),由于这些日志将由函数发布到CloudWatch,因此函数执行角色应该具有向CloudWatch授予权限。这与触发Lambda函数的人无关。
  2. 现在是L@E,有时您可能会以一种不符合CloudFront标准的方式修改请求/响应。在这些情况下,只有CloudFront知道您搞砸了(您的Lambda函数不知道此事),并以日志形式将此知识发布到CloudWatch。由于这是一个不同的实体,它需要自己的权限才能将日志推送到CloudWatch(您已通过AWSServiceRoleForCloudFrontLogger提供了此权限)。

1
谢谢你的回答。你是对的。我实际上自己找到了解决方法,通过授予执行角色策略更多权限后,它开始工作了。我目前正在与AWS支持团队交流,以确定为什么需要这样做,一旦我有答案,我会在这里发布。 - mustdobetter
更新了解释,请告诉我这是否有意义! - vipulbansal91
1
为了参考,我已经在原始帖子中发布了AWS支持建议的固定角色权限。 - mustdobetter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接