AWS CloudFront Functions 推出统一日志字段
Amazon CloudFront 的边缘函数(CloudFront Functions)可在全球 POP 节点运行轻量级代码,用于请求/响应改写与判断。以往若要记录函数内部决策(如令牌校验结果、源站返回的特定头),需依赖实时日志仅能获取 800 字节请求头,或通过 console.log 输出到 CloudWatch Logs,但后者缺乏完整请求上下文,必须自行关联访问日志。新发布的 viewer-request-log-data 与 viewer-response-log-data 两个字段解决了该问题。
工作原理与使用方法
开发者可在函数代码中调用新增的辅助方法 cf.logCustomData(String),传入 UTF-8 字符串。该数据会被自动 URL 编码并截断至 800 字节,直接写入对应的 CloudFront 标准(v2)或实时访问日志字段,无需额外基础设施与费用。
- 配置路径:CloudFront 控制台 → 对应分发 → Logging 标签 → 添加日志目标 → 附加设置中勾选上述两个字段;亦支持 CloudFormation/CDK。
- 字段限制:每个字段最大 800 字节,超出自动截断。
- 数据格式:建议传递 JSON 字符串以便后续解析。
旧方案的痛点
此前若要将函数输出与完整请求上下文关联,只能依靠 x-edge-request-id 唯一标识,分别采集 CloudFront 访问日志与函数日志后再进行 Join 计算,既增加延迟又产生额外存储与计算开销。
典型应用场景
示例一:边缘 JWT 鉴权。函数校验请求中的令牌,利用 cf.logCustomData 输出校验失败原因(缺失、签名错误、过期等),日志中可直接看到结构化结果,便于安全审计与故障排查。
示例二:源站响应头捕获。在 viewer response 事件中记录源站返回的某个头信息(如调试头),随后将其删除避免暴露给终端用户,同时保留内部可见的日志轨迹。
{"viewer-request-log-data":"%7B%22logType%22:%22token%22,%22logValue%22:%22VALID%22%7D","viewer-response-log-data":"-"}对读者的意义与技术解读
对于运维、SRE 与站长,此项更新显著降低了边缘计算可观测性的门槛。过去为获得函数粒度日志,往往需要搭建 Kinesis / Lambda 等管道做日志 Join,现在内置字段让边缘逻辑与访问日志天然对齐,可直接使用 Amazon Athena 或既有 SIEM 分析。在排查跨境 CDN 加速异常、令牌拦截误杀、A/B 测试头处理等问题时,能快速定位到具体边缘节点上的代码决策,提升 MTTR。此外,无额外成本的特性也适合大规模生产环境常态化开启。
参考:AWS 官方博客原文