跳至内容

为什么我的 Lambda@Edge CloudWatch 日志没有送达?

1 分钟阅读
0

我已将 AWS Lambda@Edge 函数与 Amazon CloudFront 分配相关联。但是,我在 Amazon CloudWatch Logs 日志流中找不到 Lambda@Edge 函数的日志。

解决方法

检查与 Lambda@Edge 函数关联的 IAM 角色的权限

如果与 Lambda@Edge 函数关联的 AWS Identity and Access Management (IAM) 角色缺少所需的权限,则不会填充 Lambda@Edge 日志。验证该函数角色是否具有创建日志组和流并将日志事件放入任何 AWS 区域所需的权限。

IAM 策略示例:

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

有关将数据发送到 CloudWatch Logs 所需权限的详细信息,请参阅设置 Lambda@Edge 的 IAM 权限和角色

在 CloudFront 调用 Lambda 函数的区域中查找日志

在 CloudFront 控制台中确认区域。如果您使用了错误的区域,则可能看不到日志。

当您调用 Lambda@Edge 函数时,Lambda 会在收到请求的区域中创建 CloudWatch Logs 日志流。日志组名称使用以下格式:/aws/lambda/us-east-1.function-name

要查找 Lambda@Edge 函数日志,请找到 CloudFront 调用该函数的区域。完成以下步骤:

  1. 打开 CloudFront 控制台
  2. Telemetry(遥测)下,选择 Monitoring(监控)。
  3. 选择 Lambda@Edge 选项卡。
  4. 选择您的 Lambda@Edge 函数,然后选择 View metrics(查看指标)。
  5. 选择 View function logs(查看函数日志),然后选择 CloudFront 调用该函数的区域。
    **注意:**如果您在某个区域中看到错误,请在 Errors(错误)指标图表中选择该区域。
  6. 要确定 CloudFront 路由请求的边缘站点,请检查 x-amz-cf-pop 响应的标头值。然后,在 CloudWatch Logs 中检查相应区域,以查看日志文件。例如,如果 x-amz-cf-popIAD89-P1,则 IAD 为机场代码,且 CloudFront 在 us-east-1 中处理了请求。

如果 Lambda 向 CloudFront 返回无效的响应,则 CloudFront 会在日志文件中记录错误消息。然后,CloudFront 会将这些日志发布到 Lambda 函数运行所在区域的 CloudWatch Logs 中。日志组使用以下格式:/aws/cloudfront/LambdaEdge/DistributionId。要查找可以找到 CloudWatch Logs 日志文件的区域,请参阅确定 Lambda@Edge 区域

相关信息

报告、指标和日志

确定您的账户是否将日志推送到 CloudWatch

AWS 官方已更新 8 个月前