Конечно, вы можете использовать триггер Lambda@Edge Origin Response, чтобы изменить ответ и установить нужный заголовок. В некотором смысле это будет «наиболее правильное» и, следовательно, «наиболее желательное» решение, но только в теоретическом смысле, поскольку оно приводит к ненужным затратам и сложности.
Значение по умолчанию TTL - это значение, которое используется CloudFront, внутренне, когда не найден заголовок ответа Cache-Control
, поэтому вы можете установить его равным 0 и включить правильные заголовки Cache-Control
при создании объектов S3, чтобы не использовать TTL по умолчанию, кроме перенаправления. Что мне не нравится в этом, так это то, что нет заголовка, который бы настаивал на том, чтобы браузер также не кэшировал перенаправление.
Но вам не нужно возвращать перенаправление в браузер, здесь. Вам вообще не нужно перенаправлять.
С помощью функции Cloud Front Origin Failover вы можете настроить два источника для ваших дистрибутивов - основной и дополнительный, чтобы ваш контент обслуживался из вашего вторичного источника, если CloudFront обнаруживает, что ваше основное происхождение недоступно.
https://aws.amazon.com/about-aws/whats-new/2018/11/amazon-cloudfront-announces-support-for-origin-failover/
Слово «недоступно» здесь излишне расплывчато, потому что эта функция делает больше, и она будет делать то, что вы хотите , Чтобы задать источник возникновения триггера «аварийное переключение» ...
Вы можете выбрать любую комбинацию из следующих кодов состояния: 500, 502, 503, 504, 404 или 403.
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/high_availability_origin_failover.html#concept_origin_groups .creating
Таким образом, достаточно обычного поведения корзины, правила перенаправления не требуются.
Обратите внимание, что при такой настройке окончательный ответ Единственное, что может быть кэшировано CloudFront - независимо от того, является ли этот ответ источником первичного (S3) или вторичного (лямбда через шлюз API) - так что это устраняет проблему с кэшированием переходных ответов.
Примечание Кроме того, несмотря на использование слова «отработка отказа», CloudFront не поддерживает концептуальную модель состояния источника, поэтому каждый запрос стоит сам по себе и будет go первичному источнику, даже если другие запросы «не выполняются». «