如何配置CloudFront的Lambda Edge仅在访问cat.jpg时触发
解决Lambda@Edge仅针对cat.jpg请求触发的方案
方案一:在Lambda@Edge代码中添加路径判断
直接修改现有函数,增加请求路径校验逻辑,仅当请求目标为/cat.jpg时执行头传递操作,其他请求直接返回响应,避免不必要的计算延迟。
修改后的代码如下:
'use strict'; exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; const response = event.Records[0].cf.response; const requestUri = request.uri; // 仅匹配/cat.jpg请求时执行头传递逻辑 if (requestUri === '/cat.jpg') { response.headers['cloudfront-viewer-country'] = request.headers['cloudfront-viewer-country']; } // 无论是否匹配,直接返回响应 return callback(null, response); };
注意:如果cat.jpg存在路径前缀(如
/assets/cat.jpg),可将判断条件改为requestUri.endsWith('/cat.jpg')来适配。
方案二:调整CloudFront缓存行为,精准触发Lambda@Edge
从CloudFront触发规则层面控制,仅让/cat.jpg请求触发Lambda@Edge函数,彻底避免全量触发:
- 登录CloudFront控制台,找到目标分发
- 进入「行为」标签页,点击「创建行为」
- 在「路径模式」中输入
/cat.jpg,设置「优先级」为比默认行为(优先级0)更小的数值(比如1,数值越小优先级越高) - 在「Lambda函数关联」区域,选择「源响应」事件,关联你的Lambda@Edge函数
- 找到原有默认行为,移除其「源响应」阶段的Lambda@Edge关联
- 保存修改,等待CloudFront分发部署完成
此配置下,只有请求/cat.jpg时才会触发Lambda@Edge,其他请求完全不触发函数,从根源上消除不必要的延迟。
两种方案均可实现需求:方案一适合快速调整,无需改动CloudFront配置;方案二更高效,能减少Lambda函数调用次数,建议优先采用方案二。
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

