Lambda@Edge源请求函数event参数为空,如何排查解决?
Lambda@Edge Origin Request 事件参数为空的原因排查
环境信息
- CloudFront分发配置:
- 默认行为关联Lambda@Edge:
origin request: Lambda@Edge / arn:aws:lambda:us-east-1:...:function:*functionName*:4
- 默认行为关联Lambda@Edge:
- Lambda函数版本4的触发器详情:
Event type: origin-request Include Body: Yes Path pattern: * Service principal: replicator.lambda.amazonaws.com Statement ID: replicator.lambda.GetFunction - Lambda函数代码:
'use strict'; exports.handler = (event, context, callback) => { console.log("context: ", context); console.log("event: ", event); }; - 测试现象:向CloudFront分发域名发送GET请求后,日志显示
event: {}
排查方向及解决方法
1. 未调用Lambda回调函数,导致执行流程异常
你的代码仅打印了event和context,但没有调用callback()来完成Lambda执行。Lambda@Edge的origin request事件要求必须通过回调返回请求对象,否则会触发执行超时或异常,进而导致日志输出不完整(甚至只打印空对象)。
修改代码,补充回调逻辑:
'use strict'; exports.handler = (event, context, callback) => { console.log("context: ", context); console.log("event: ", event); // 必须调用回调返回请求,确保执行流程正常结束 callback(null, event.Records[0].cf.request); };
2. 查看了错误区域的Lambda日志
Lambda@Edge会自动将原函数复制到CloudFront边缘节点所在的多个区域。你需要确认查看的是边缘区域中复制后的Lambda函数日志,而非us-east-1区域的原函数日志:
- 进入CloudFront控制台,找到目标分发
- 切换到「关联的资源」标签,点击对应的Lambda@Edge函数链接,会直接跳转到边缘区域的函数副本
- 在副本函数的「监控」-「日志」中查看执行记录
3. CloudFront配置未生效或匹配异常
- 确认CloudFront分发状态为「已部署」,若处于「正在部署」状态,新配置还未同步到边缘节点
- 检查请求路径是否匹配默认行为的路径模式
*,若存在更具体的行为规则,可能会优先匹配并跳过当前Lambda关联 - 验证默认行为的Lambda@Edge关联是否已正确启用
4. Lambda权限配置不完整
虽然触发器显示了replicator.lambda.amazonaws.com的权限,但需确保Lambda函数的资源策略包含CloudFront服务主体的调用许可:
- 查看Lambda函数的「配置」-「权限」-「资源策略」
- 确认策略中存在允许
cloudfront.amazonaws.com调用该函数的语句,而非仅针对replicator服务
内容的提问来源于stack exchange,提问作者Arthur Feldman
相关产品推荐
相关产品推荐

