我会将 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 函数日志,您必须确定调用该函数的区域,然后查看日志。
要查找调用该函数的区域,请:
- 登录 AWS 管理控制台并打开 CloudFront 控制台。
- 在遥测类别下选择监控。
- 选择 Lambda@Edge 选项卡。
- 选择 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