Я столкнулся с той же проблемой.Сначала я исследовал написание функции Lambda @ Edge, которая проверяла бы, должен ли контент быть признан недействительным, а затем ломала кеш, добавляя параметр запроса в URL.Но это казалось таким же проблематичным (и дорогостоящим), как и аннулирование всей корзины S3.Вместо этого я решил использовать заголовок Cache-Control: no-cache
для конкретных ресурсов, которые не должны кэшироваться CloudFront, а затем просто сделать недействительными другие кэшированные ресурсы с параметрами запроса.И этот метод не требует выдачи каких-либо недействительных CloudFront .
Так, например, если я размещаю статический сайт в CloudFront / S3, который выглядит следующим образом:
- index.html
- header.jpg
- site.css
Я загружаю его на S3 следующим образом:
- index.html // Cache-Control: no-cache
- header.jpg // Linked with <img src='header.jpg?uniquedigest' />
- site.css // Linked with <link href='site.css?uniquedigest' />
Таким образом, все обновляется в CloudFrontL. Только index.html не кэшируется, и все ресурсы все еще кэшируются после первоначальногополучить из источника S3 ведро.Единственным недостатком является то, что index.html всегда выбирается из источника, но HTML должен быть достаточно маленьким, чтобы это не оказывало большого влияния на производительность.