You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda@Edge未触发CloudFront且报502错误的原因排查

排查Lambda@Edge + CloudFront 502错误(无Lambda调用记录)

这种情况我踩过好几次坑,核心问题其实是Lambda@Edge函数根本没被CloudFront成功触发执行——不然你肯定能在日志里看到调用痕迹。下面是几个最常见的原因,你可以逐一排查:

1. Lambda@Edge的版本ARN不合法或区域错误

Lambda@Edge有个硬性要求:必须使用带明确版本号的ARN(比如arn:aws:lambda:us-east-1:123456789012:function:my-redirect-function:2),绝对不能用$LATEST版本。而且所有Lambda@Edge函数都必须先部署在us-east-1区域,再关联到CloudFront。

如果你的ARN里区域不是us-east-1,或者版本号写错/不存在,CloudFront在边缘节点根本找不到对应的函数,直接返回502,自然不会产生Lambda调用日志。

解决方法:

  • 登录us-east-1区域的Lambda控制台,找到你的重定向函数
  • 复制正确的带版本号的ARN(别手敲,直接复制避免拼写错误)
  • 回到CloudFront控制台,重新关联这个ARN到缓存行为的4个事件上

2. Lambda函数缺少CloudFront的调用权限

CloudFront需要被授权才能调用Lambda@Edge函数。如果你是手动创建的Lambda函数,很可能没配置正确的信任策略,导致CloudFront尝试调用时被IAM拒绝——这种情况下,请求根本到不了Lambda,自然没有调用记录,直接返回502。

解决方法:

  • 打开Lambda函数的“配置”→“权限”→“信任策略”
  • 确保策略中包含CloudFront的服务主体,正确的策略示例如下:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "edgelambda.amazonaws.com"
          },
          "Action": "lambda:InvokeFunction",
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": "你的AWS账号ID"
            },
            "ArnLike": {
              "aws:SourceArn": "arn:aws:cloudfront::你的AWS账号ID:distribution/你的CloudFront分发ID"
            }
          }
        }
      ]
    }
    
  • 如果你是通过CloudFront控制台关联的Lambda@Edge,AWS会自动添加这个权限,手动关联的话就需要自己配置。

3. CloudFront分发还在部署中

当你把Lambda@Edge关联到缓存行为后,CloudFront需要把新配置同步到全球所有边缘节点,这个过程通常需要5-15分钟。如果部署还没完成(控制台显示“部署中”),此时访问端点可能会返回502,因为边缘节点还没拿到新的Lambda关联配置。

解决方法:

  • 打开CloudFront控制台,查看你的分发状态,等状态变成“已部署”后再测试。

4. 边缘节点的Lambda日志没找对地方

Lambda@Edge的日志不会存在us-east-1区域(原函数所在区域),而是存在请求触发的边缘节点对应的CloudWatch区域。比如用户从美国西部访问,日志就会存在us-west-2区域。

虽然你说没看到调用记录,但有可能是找错了日志位置——比如函数其实被调用了,但初始化阶段就失败了(比如代码语法错误、依赖缺失),日志在边缘区域的CloudWatch里。

解决方法:

  • 打开CloudWatch控制台,切换到几个常用的边缘区域(比如us-west-2、eu-west-1、ap-southeast-1)
  • 查找以/aws/lambda/us-east-1.你的函数名命名的日志组,看看有没有错误记录。

5. 缓存行为的路径模式不匹配

你关联了Lambda到4个事件,但如果你的测试请求路径和缓存行为的路径模式不匹配,CloudFront就不会触发Lambda函数。比如你设置的缓存行为路径是/assets/*,但你访问的是根路径/,这种情况下Lambda不会被调用,不过一般不会返回502,但也不排除某些特殊配置组合导致的错误。

解决方法:

  • 检查CloudFront缓存行为的路径模式,确保和你测试的请求路径完全匹配(比如用/*匹配所有路径来测试)。

内容的提问来源于stack exchange,提问作者Vishnu Ranganathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:07:22