配置Lambda-Edge函数CloudWatch日志失败,访问时报Log Streams加载错误
我之前也碰到过一模一样的“加载Log Streams时出错,请刷新页面重试”问题,结合你的情况,给你几个可以一步步排查的点:
确认CloudWatch日志组的区域:Lambda@Edge的日志不会存在你创建函数的区域,而是存在CloudFront边缘节点触发函数时所在的区域。比如如果你的CloudFront分发覆盖了北美地区,日志大概率在
us-east-1或者us-west-2这类边缘节点集中的区域,你需要切换到对应区域去查找日志组,而不是一直停留在函数创建的区域。检查角色的信任关系配置:哪怕你给角色加了足够的权限,如果信任策略没允许边缘Lambda服务调用,也会导致日志无法上传。你的自定义角色的信任策略必须包含
edgelambda.amazonaws.com和lambda.amazonaws.com这两个服务主体,示例配置如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "edgelambda.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
手动触发函数并等待同步:Lambda@Edge的日志同步延迟有时候会超过2小时,尤其是函数第一次被边缘节点触发的时候。你可以主动访问一下你的CloudFront分发对应的域名,触发Lambda函数执行,然后再去对应区域的CloudWatch控制台刷新日志流,看看是否能加载出来。
检查CloudWatch服务配额:如果你的AWS账号在目标区域的CloudWatch日志组或日志流数量达到了配额上限,也会导致无法创建新的日志流。你可以在AWS控制台的“服务配额”页面,搜索CloudWatch相关的配额,确认是否有超限的情况。
排查Lambda函数本身的执行错误:如果函数在边缘节点执行时抛出了未捕获的异常,可能会导致日志无法正常生成。你可以回到Lambda控制台的“监控”标签,查看函数的执行错误指标,或者尝试在测试事件中运行函数,看是否能正常输出日志,确认函数本身没有问题。
内容的提问来源于stack exchange,提问作者Xen_mar

