Подтвердить что ты не робот

Amazon S3 и кэш Cloudfront, как очистить кеш или синхронизировать их кеш

У меня есть задание cron, которое выполняется каждые 10 минут и обновляет тип содержимого и x-amz-meta. Но со вчерашнего дня, похоже, после выполнения задания cron Amazon не подбирает сделанные изменения (обновляет его кеш).

Я даже пошел и внес изменения вручную, но никаких изменений...

Когда видео загружается, он имеет тип контента application/x-mp4, а задание cron меняет его на video/mp4.

Хотя S3 имеет правильный тип контента video/mp4 показывает облачный график application/x-mp4 (старый тип содержимого)....

Работа cron работает в течение последних 6 месяцев без проблем.

Что не так с кешированием амазонок? Как синхронизировать кеширование?

4b9b3361

Ответ 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