我已将 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 调用该函数的区域。完成以下步骤:
- 打开 CloudFront 控制台。
- 在 Telemetry(遥测)下,选择 Monitoring(监控)。
- 选择 Lambda@Edge 选项卡。
- 选择您的 Lambda@Edge 函数,然后选择 View metrics(查看指标)。
- 选择 View function logs(查看函数日志),然后选择 CloudFront 调用该函数的区域。
**注意:**如果您在某个区域中看到错误,请在 Errors(错误)指标图表中选择该区域。
- 要确定 CloudFront 路由请求的边缘站点,请检查 x-amz-cf-pop 响应的标头值。然后,在 CloudWatch Logs 中检查相应区域,以查看日志文件。例如,如果 x-amz-cf-pop 为 IAD89-P1,则 IAD 为机场代码,且 CloudFront 在 us-east-1 中处理了请求。
如果 Lambda 向 CloudFront 返回无效的响应,则 CloudFront 会在日志文件中记录错误消息。然后,CloudFront 会将这些日志发布到 Lambda 函数运行所在区域的 CloudWatch Logs 中。日志组使用以下格式:/aws/cloudfront/LambdaEdge/DistributionId。要查找可以找到 CloudWatch Logs 日志文件的区域,请参阅确定 Lambda@Edge 区域。
相关信息
报告、指标和日志
确定您的账户是否将日志推送到 CloudWatch