Я использую AmazonF CloudFront для обслуживания статических файлов моих веб-приложений.
Нет ли способа сообщить дистрибутиву Cloudfront, что ему нужно обновить свой файл, или указать один файл, который нужно обновить?
Amazon рекомендует в качестве обходного пути для этой проблемы установить версии файлов, таких как logo_1.gif, logo_2.gif и т. Д., Но это кажется довольно глупым решением. Разве нет другого пути?
Ответы:
Хорошие новости. Amazon наконец-то добавил функцию недействительности. См. Справочник по API .
Это пример запроса от API Reference:
источник
createInvalidation
, я все еще вижу, что обновление занимает 5-10 минут или около того, чтобы сделать его недействительным. Заметьте, я пишу этот комментарий через 4 года после вашего.По состоянию на 19 марта Amazon теперь позволяет TTL кэша Cloudfront равняться 0 секундам, поэтому вы (теоретически) никогда не должны видеть устаревшие объекты. Поэтому, если у вас есть ресурсы в S3, вы можете просто перейти на веб-панель AWS => S3 => Изменить свойства => Метаданные, а затем установить значение «Cache-Control» на «max-age = 0».
Это прямо из документации API :
источник
С Invalidation API он обновляется за несколько минут.
Проверьте PHP Invalidator .
источник
Автоматическая настройка обновления за 5 минут
Хорошо, парни. На данный момент лучший способ выполнить автоматическое обновление CloudFront (аннулирование) - создать функцию Lambda, которая будет запускаться каждый раз, когда какой-либо файл загружается в корзину S3 (новый или перезаписывается).
Даже если вы никогда раньше не использовали лямбда-функции, это действительно просто - просто следуйте моим пошаговым инструкциям, и это займет всего 5 минут:
Шаг 1
Перейдите на https://console.aws.amazon.com/lambda/home и нажмите « Создать лямбда-функцию».
Шаг 2
Нажмите на пустую функцию (на заказ)
Шаг 3
Нажмите на пустое (обведенное) поле и выберите S3 из списка
Шаг 4
Выберите ваш Bucket (так же, как для дистрибутива CloudFront)
Шаг 5
Установите тип события «Объект создан (все)»
Шаг 6
Установите Prefix и Suffix или оставьте его пустым, если вы не знаете, что это такое.
Шаг 7
Установите флажок Включить триггер и нажмите Далее
Шаг 8
Назовите свою функцию (что-то вроде: YourBucketNameS3ToCloudFrontOnCreateAll )
Шаг 9
Выберите Python 2.7 (или выше) в качестве среды выполнения
Шаг 10
Вставьте следующий код вместо кода Python по умолчанию:
Шаг 11
Откройте https://console.aws.amazon.com/cloudfront/home на новой вкладке браузера и скопируйте свой идентификатор распространения CloudFront для использования на следующем шаге.
Шаг 12
Вернитесь на лямбда-вкладку и вставьте свой идентификатор распространения вместо _YOUR_DISTRIBUTION_ID_ в коде Python. Держите окружающие цитаты.
Шаг 13
Установить обработчик : lambda_function.lambda_handler
Шаг 14
Нажмите на поле со списком ролей и выберите « Создать пользовательскую роль» . Откроется новая вкладка в браузере.
Шаг 15
Щелкните « Просмотр документа политики» , нажмите « Изменить» , нажмите « ОК» и замените определение роли следующим (как есть):
Шаг 16
Нажмите разрешить . Это вернет вас к лямбде. Дважды проверьте, что только что созданное вами имя роли выбрано в поле со списком Существующие роли .
Шаг 17
Установите для памяти (МБ) значение 128, а для параметра Время ожидания - 5 секунд.
Шаг 18
Нажмите Далее , затем нажмите Создать функцию
Шаг 19
Вы хороши, чтобы пойти! Теперь каждый раз, когда вы будете загружать / перезагружать любой файл в S3, он будет оцениваться во всех местах CloudFront Edge.
PS - Когда вы тестируете, убедитесь, что ваш браузер загружает изображения из CloudFront, а не из локального кэша.
PSS - Обратите внимание, что только первые 1000 недействительных файлов в месяц являются бесплатными, каждая недействительность сверх лимита стоит $ 0,005. Также может взиматься дополнительная плата за функцию лямбда, но это очень дешево.
источник
Bucket Explorer имеет пользовательский интерфейс, который делает это довольно легко сейчас. Вот как:
Щелкните правой кнопкой мыши ваше ведро. Выберите «Управление дистрибутивами».
Щелкните правой кнопкой мыши ваш дистрибутив. Выберите «Получить список недействительности Cloudfront». Затем нажмите «Создать», чтобы создать новый список недействительности. Выберите файлы для аннулирования и нажмите «Invalidate». Подождите 5-15 минут.
источник
Если у вас установлен boto (который не только для python, но также устанавливает кучу полезных утилит командной строки), он предлагает утилиту командной строки, называемую специально
cfadmin
или «cloud front admin», которая предлагает следующие функциональные возможности:Вы обесцениваете вещи, запустив:
источник
Просто отправьте сообщение любому посетителю этой страницы (первый результат в «Обновлении файла Cloudfront») о том, что на swook.net имеется простой в использовании сетевой доступный доступный инвалидатор.
Этот новый инвалидатор:
Полное раскрытие: я сделал это. Радоваться, веселиться!
источник
Один очень простой способ сделать это - верстка FOLDER.
Так что, если ваши статические файлы, например, сотни, просто поместите их все в папку с именем год + версия.
например, я использую папку с именем 2014_v1, где внутри у меня есть все мои статические файлы ...
Так что внутри моего HTML я всегда помещаю ссылку на папку. (конечно, у меня есть PHP include, где я установил имя папки.) Таким образом, изменив в 1 файле, он фактически изменится во всех моих PHP файлах ..
Если я хочу полное обновление, я просто переименую папку в 2014_v2 в мой источник и изменим в php include на 2014_v2
Все HTML автоматически изменяются и запрашивают новый путь, MISS-кэш облака и запрашивают его у источника.
Пример: SOURCE.mydomain.com - мой источник, cloudfront.mydomain.com - это CNAME для распространения на облачном фронте.
Таким образом, PHP назвал этот файл cloudfront.mydomain.com/2014_v1/javascript.js, и когда я хочу полное обновление, просто переименовываю папку в исходный код в «2014_v2» и меняю включение PHP, устанавливая папку в «2014_v2» ,
Таким образом, нет никаких задержек для признания недействительными и никакой цены!
Это мой первый пост в stackoverflow, надеюсь, я сделал это хорошо!
источник
Установите TTL = 1 час и замените
http://developer.amazonwebservices.com/connect/ann.jspa?annID=655
источник
В рубине, используя камень тумана
даже при аннулировании все еще требуется 5-10 минут для обработки и обновления аннулирования на всех пограничных серверах Amazon
источник
текущая поддержка AWS CLI признана недействительной в режиме предварительного просмотра. Запустите следующее в своей консоли один раз:
Я развернул свой веб-проект, используя npm. У меня есть следующие скрипты в моем
package.json
:Имея указанные выше сценарии, вы можете развернуть свой сайт с помощью:
источник
--paths /
на--paths /*
. мой тоже был похож на твой, и это не сделало недействительным распределение ...Если вы используете AWS, вы, вероятно, также используете его официальный инструмент CLI (рано или поздно). AWS CLI версии 1.9.12 или выше поддерживает аннулирование списка имен файлов.
Полное раскрытие: я сделал это. Радоваться, веселиться!
источник
Перейти к CloudFront.
Нажмите на свой ID / Распределения.
Нажмите на Invalidations.
Нажмите создать Invalidation.
В гигантском поле для примера введите * и нажмите кнопку «аннулировать»
Готово
источник