Как добиться сложного кеширования файлов c на объектах AWS S3 (результаты сборки CreateReactApp)? - PullRequest
0 голосов
/ 02 августа 2020

Итак, у меня есть приложение React, размещенное в корзине AWS S3 (перед ним также есть дистрибутив CloudFront). Используя рабочий процесс GitHub Actions, я развертываю выходные данные сборки на S3 с помощью aws -cli s3 syn c command :

aws s3 sync build s3://mybucket --delete --acl public-read

Теперь я хочу выполнить stati c кэширование файлов с обозначенной начальной конфигурацией в CreateReactApp docs :

  • Cache-Control: max-age=31536000 для build/static ресурсов,
  • Cache-Control: no-cache для всего остального (чтобы браузер всегда проверял наличие обновленного index. html файл)

Вопрос

Как добиться применения такой условной конфигурации к объектам S3 на основе путей к файлам / папкам?

Что я думал / пробовал до сих пор

  • Сначала я подумал, что это можно сделать с настройкой в ​​ведре S3. Но после некоторого поиска я понял, что в самом ведре такой настройки нет (по крайней мере, ответы на этот пост не предлагают ничего).
  • Затем я направился к --cache-control флаг aws cli s3 syn c docs , но я не нашел прямого однострочного способа применения различных элементов управления кешем.

1 Ответ

1 голос
/ 02 августа 2020

Это можно сделать очень просто без какой-либо настройки на стороне S3, поскольку вы сначала используете CloudFront, это будет контролироваться в поведении.

Вы можете определить несколько поведений , которые сопоставляются на основе шаблонов путей. В CloudFront это будет отображаться так, как если бы у вас было несколько источников, но оба могли go в одну и ту же корзину S3.

У вас будет шаблон пути build/static, для которого вы установите максимальный возраст кэширования для всех объектов . Затем для поведения по умолчанию вы отключите кеширование объектов.

В этой статье есть базовая c демонстрация его настройки.

...