Amazon S3 и кэш Cloudfront, как очистить кеш или синхронизировать их кеш
У меня есть задание cron, которое выполняется каждые 10 минут и обновляет тип содержимого и x-amz-meta. Но со вчерашнего дня, похоже, после выполнения задания cron Amazon не подбирает сделанные изменения (обновляет его кеш).
Я даже пошел и внес изменения вручную, но никаких изменений...
Когда видео загружается, он имеет тип контента application/x-mp4
, а задание cron меняет его на video/mp4
.
Хотя S3 имеет правильный тип контента video/mp4
показывает облачный график application/x-mp4
(старый тип содержимого)....
Работа cron работает в течение последних 6 месяцев без проблем.
Что не так с кешированием амазонок? Как синхронизировать кеширование?
Ответы
Ответ 1
Использовать Invalidations для очистки кеша, вы можете поместить путь к файлам, которые хотите очистить, или просто использовать wild cards для очистки всего.
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html#invalidating-objects-api
Это также можно сделать с помощью API!
http://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html
В AWS PHP SDK теперь есть методы, но если вы хотите использовать что-то более легкое, посмотрите эту библиотеку:
http://www.subchild.com/2010/09/17/amazon-cloudfront-php-invalidator/
user3305600 решение не работает, поскольку установка его на ноль является эквивалентом использования заголовков кэша исходного кода.
Ответ 2
Что касается реального кода
получите свой идентификатор распространения CloudFront
aws cloudfront list-distributions
Отменить все файлы в дистрибутиве, поэтому CloudFront извлекает свежие
aws cloudfront create-invalidation --distribution-id=S11A16G5KZMEQD --paths /
Моя фактическая полная версия script
#!/usr/bin/env bash
BUCKET=mysite.com
SOURCE_DIR=dist/
export AWS_ACCESS_KEY_ID=xxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxx
export AWS_DEFAULT_REGION=eu-west-1
echo "Building production"
if npm run build:prod ; then
echo "Build Successful"
else
echo "exiting.."
exit 1
fi
echo "Removing all files on bucket"
aws s3 rm s3://${BUCKET} --recursive
echo "Attempting to upload site .."
echo "Command: aws s3 sync $SOURCE_DIR s3://$BUCKET/"
aws s3 sync ${SOURCE_DIR} s3://${BUCKET}/
echo "S3 Upload complete"
echo "Invalidating cloudfrond distribution to get fresh cache"
aws cloudfront create-invalidation --distribution-id=S11A16G5KZMEQD --paths / --profile=myawsprofile
echo "Deployment complete"
Ссылки
http://docs.aws.amazon.com/cli/latest/reference/cloudfront/get-invalidation.html
http://docs.aws.amazon.com/cli/latest/reference/cloudfront/create-invalidation.html
Ответ 3
S3 не используется для разработки в режиме реального времени, но если вы действительно хотите протестировать свой недавно использованный веб-сайт, используйте
http://yourdomain.com/index.html?v=2
http://yourdomain.com/init.js?v=2
Добавление параметра версии в конце приведет к аннулированию кешированной версии файла, и браузер получит новую копию файла из ведра сервера
Ответ 4
Cloudfront будет кэшировать файл/объект до истечения срока действия кеша. По умолчанию это 24 часа. Если вы изменили это на большое значение, это займет больше времени.
Если вы в любое время должны очистить кеш, используйте invalidation. Он взимается отдельно.
Другой вариант - изменить URL (ключ объекта), чтобы он всегда выбирал новый объект.
Ответ 5
Не используйте недопустимые значения. Они не могут быть возвращены, и вы будете платить. Они только так, как это работает для меня, уменьшают TTL и ждут.
Привет
Ответ 6
Если вы ищете минимальное решение, которое делает недействительным кеш, этой отредактированной версии решения доктора Манхэттена должно быть достаточно. Обратите внимание, что я указываю каталог root/, чтобы указать, что я хочу, чтобы весь сайт обновился.
export AWS_ACCESS_KEY_ID=<Key>
export AWS_SECRET_ACCESS_KEY=<Secret>
export AWS_DEFAULT_REGION=eu-west-1
echo "Invalidating cloudfrond distribution to get fresh cache"
aws cloudfront create-invalidation --distribution-id=<distributionId> --paths / --profile=<awsprofile>
Коды регионов можно найти здесь
Вам также нужно создать профиль, используя aws cli.
Используйте опцию aws configure --profile
. Ниже приведен пример фрагмента из Amazon.
$ aws configure --profile user2
AWS Access Key ID [None]: AKIAI44QH8DHBEXAMPLE
AWS Secret Access Key [None]: je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: text
Ответ 7
(редактирование: не работает). С 2014 года вы можете очищать свой кеш всякий раз, когда захотите. Пожалуйста, внимательно изучите документацию или
просто перейдите в настройки распространения > Поведение > Изменить
Использование кэширования объектов (заголовки исходного кэша) Настройка
Минимальный TTL = 0
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html