如何配置Lambda调用CloudFront createInvalidation清空所有缓存?
针对CloudFront缓存失效配置的问题解答
1. Quantity参数配置说明
- 你不需要填写偏大的数值,也完全不需要统计S3存储桶的文件总数。
Quantity字段的值必须和Items数组中实际包含的路径条目数完全一致,否则调用API时会直接返回参数校验错误。 - 你当前场景下
Items数组只需要1个通配符路径,因此Quantity直接填1即可。
2. Items数组配置说明
- 可以直接将
"/*"作为Items数组的唯一元素,这个通配符会匹配该CloudFront分发下所有路径的所有缓存内容,完全满足你全量更新后清全部缓存的需求。 - 不能直接传
"/*"字符串替代数组,AWS JS SDK 对createInvalidation的参数有严格的类型校验,Items字段必须是数组类型,即使只有一个元素也必须用数组包裹。
正确的参数示例
const invalidationParams = { DistributionId: "XXXX", InvalidationBatch: { CallerReference: Date.now().toString(), Paths: { Quantity: 1, Items: [ "/*" ] } } };
循环调用CLI方案的适用性
不推荐使用该方案,原因如下:
- 你的场景需要集成到Step Function中,Lambda直接调用SDK原生API比调用CLI更稳定,没有额外的子进程开销,也不需要处理CLI安装、输出解析、错误捕获等额外问题。
- 单条
"/*"的失效请求就可以覆盖全量清缓存的需求,完全不需要循环调用,循环调用反而会产生大量无效的失效请求,还可能触发CloudFront的失效请求频率配额限制,反而影响业务正常更新。
内容的提问来源于stack exchange,提问作者Noah Gray
相关产品推荐
相关产品推荐

