В роли CDN-провайдера будут CloudFront и CloudFlare, для которых требуется создать две AWS S3 корзины с разными именами (cdn.cfr.example.com => CloudFront и cdn.cfl.example.com => CloudFlare).
Что бы не копировать данные в обе корзины дважды — можно настроить репликацию данных между двумя корзинами — это и будет AWS Simple Sorage Service Cross Region Replication, или AWS S3 CRR.
обе корзины должны иметь включенное версинирование (см. Using Versioning)
корзины должны располагаться в разных регионах
корзины должны иметь права на репликацию объектов между этими корзинами
Ограничения CRR:
существующие файлы в исходной корзине не будут реплицированы, если они были добавлены до настройки репликации (т.е. только новые файлы будут скопированы в корзину-приёмник)
нельзя использовать цепочку репликаций, т.е. из корзины А в корзину Б, а затем в корзину В
Contents
Настройка AWS S3 Cross-Region Replication
Создаём две корзины:
Для обеих корзин включаем версинирование:
В исходной корзине bttrm-crr-source переходим во вкладку Management > Replication, кликаем Add rule:
Указываем репликацию всего содержимого исходной корзины:
Жмём Next, и указываем имя корзины-получателя:
Далее — доступ.
Выбираем Create new IAM role, указываем её имя:
Сохраняем:
Проверка репликации
Загружаем тестовый файл в корзину bttrm-crr-source:
если вы выполняете DELETE запрос без указания ID версии объекта — AWS S3 добавляет т.н. «Delete Marker«:
при использовании последней версии конфигурации репликации, т.е. в ней задаётся елемент Filter — S3 не выполнит репликацию Delete Marker
если элемент Filter не задан — S3 будет считать, что используется версия 1, в которой маркеры удаления обрататываются иначе, см. Backward Compatibility
если вы выполняете DELETE запрос с указанием ID версии — S3 удалит его в исходной корзине, но не выполнит репликацию удаления во вторую корзину
Теперь удаляем ReplicationConfiguration, "Filter": {}, "Priority": 1,DeleteMarkerReplication и добавляем "Prefix": "", по сути — приводим её к виду версии 1:
Конфиг версии 2 на момент написание не умеет репликацию DeleteMarkers вообще, ответ от тех. поддержки AWS:
The internal team is working on bringing feature of Delete replication in V2 as well but it may take some time for that to happen. It is possible that the way V2 has been implemented in back-end is little different from V1 and using this feature directly may have been causing issues. Unfortunately, I don’t have any ETA on when this would finish. Till then, I’m sure your blog would be able to help AWS Users 🙂