用 Lambda@Edge 动态生成图片缩略图,顺便记录几个踩过的坑
某个项目的图片资源一直放在 AWS S3,再通过 CloudFront 对外分发。用户上传的图片、业务封面图虽然在 App 端做了裁剪和压缩,但还是顶不住原图本身体积大。需要查看原图时没有问题,列表页、详情页和图片墙也一直加载这些大图,就有点浪费了。
访问量上来以后,CloudFront 的出站流量也跟着涨。这个问题和图片能不能正常访问没关系,主要还是日常页面根本用不到原始尺寸,却一直在传原图。
针对这种情况,我用 Lambda@Edge 做了一套按需生成缩略图的方案。原图继续保留,前端通过查询参数指定目标尺寸;没有指定参数的高频接口,则默认给图片地址带上缩略图参数。缩略图第一次访问时生成,后面交给 CloudFront 和单独的 S3 桶缓存。
经观察,上线后看了一周,CDN 出站流量大约少了三分之二。

