为什么 Lambda@Edge CloudTrail 日志没有传输?

1 分钟阅读
0

我会将 AWS Lambda@Edge 函数与 Amazon CloudFront 分配关联起来作为触发条件。在 AWS CloudTrail 日志流中填充的 Amazon CloudWatch 中找不到 Lambda@Edge 函数的执行日志。如何解决导致日志丢失的原因?

如果与 Lambda@Edge 函数关联的 AWS 身份和访问管理 (IAM) 角色缺少所需的权限,则 Lambda@Edge 日志无法填充。如果您从控制台检查错误区域,则日志也可能显示为丢失。

解决方法

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

验证函数执行角色是否具有创建日志组和流并将日志事件放入任何 AWS 区域所需的权限。如果与 Lambda 函数关联的执行角色没有所需的权限,日志传输将失败。

附加到 Lambda@Edge 执行角色的 IAM 策略示例:

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

有关向 CloudWatch 日志发送数据所需的权限的更多信息,请参阅设置 Lambda@Edge 的 IAM 权限和角色

检查激活 Lambda 函数的区域中的日志

激活 Lambda@Edge 函数后,Lambda 会在离激活该函数的位置最近的 AWS 区域创建 CloudWatch 日志流。日志组名称的格式为**/aws/lambda/us-east-1.function-name**,其中 function-name 是 Lambda 函数的名称。

要查找 Lambda@Edge 函数日志,您必须确定调用该函数的区域,然后查看日志。

要查找调用该函数的区域,请:

  1. 登录 AWS 管理控制台并打开 CloudFront 控制台
  2. 遥测类别下选择监控
  3. 选择 Lambda@Edge 选项卡。
  4. 选择 Lambda@Edge 函数,然后选择查看函数指标。

从监控页面中,我们现在可以看到在特定时间段内调用了副本函数的哪些区域。从这里我们可以找到我们在每个区域的函数的 CloudWatch 日志。为此,请选择查看函数日志,然后选择调用该函数的区域。

**注意:**如果您在特定区域发现错误,请选择图表中出现错误的区域。要了解更多信息,请参阅确定 Lambda@Edge 区域

或者,要确定请求被路由到的边缘站点,请检查 x-amz-cf-pop 响应的标头值。然后,在 CloudWatch 中检查相应的区域以查看日志文件。例如,如果 x-amz-cf-pop 设置为 IAD89-P1,则表示请求在 us-east-1 区域生效,其中 IAD 是机场代码。

当 Lambda 向 CloudFront 返回无效的响应时,CloudFront 会推送写入日志文件的错误消息。然后,CloudFront 将推送到执行 Lambda 函数的 CloudWatch 区域。日志组的格式如下:/aws/cloudfront/LambdaEdge/DistributionId,其中 DistributionId 是分配 ID。要查找 CloudWatch 日志文件所在的区域,请参阅确定 Lambda@Edge 区域


相关信息

为 Lambda@Edge 设置 IAM 权限和角色

ambda@Edge 函数的 CloudWatch 指标和日志

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

AWS 官方
AWS 官方已更新 2 年前