Как преодолеть перенаправление в кеше CloudFront и использовать вместо него API Gateway? - PullRequest
0 голосов
/ 12 мая 2019

У меня настроен дистрибутив CloudFront, поэтому <domain>/api перенаправляет меня на <api-gateway-url>/<env>/api.Однако я обнаружил, что иногда CloudFront кэширует ответы на запросы GET, и браузер не перенаправляет на конечную точку шлюза API и возвращает кэшированный ответ.

Пример: /api/getNumber перенаправляет на <api-gateway-url>/<env>/api/getNumber и возвращает меня 2. Я изменяю ответ так, чтобы он возвращал число 300, но когда я делаю запрос через браузер, перенаправление не происходит, и явсе еще вернись номер два.В заголовке ответа x-cache указано попадание в кэш CloudFront.

1 Ответ

0 голосов
/ 12 мая 2019

AWS CloudFront часто используется для кэширования, тем самым уменьшая количество запросов, которые попадут на внутренние ресурсы.Поэтому вы не должны использовать CloudFront в своей тестовой среде, если хотите немедленно увидеть изменения.

В вашем случае кажется, что ваша конечная точка не имеет никаких параметров (Path / Query), поэтому, по сути, CloudFront видит один и тот же запрос каждый раз, естественно, в этом случае вы попадете в кеш.

У вас есть несколько вариантов, чтобы «исправить» следующее:

  1. Разнообразьте ваши запросы API (используя параметры, например)
  2. Используйте TTL-опции CloudFront , чтобы CloudFront сохранял кэшированные объекты меньше времени

    ПРИМЕЧАНИЕ: Это не рекомендуется, если это производственная среда, поскольку это может устранить весь смысл кэширования инарушить ожидаемое поведение

  3. Отключить кэширование CloudFront для тех путей, которые не принимают параметров и / или чей ответ будет часто изменяться, таким образом, сохраняя кэширование для остальной части вашего дистрибутива:

    https://aws.amazon.com/premiumsupport/knowledge-center/prevent-cloudfront-from-caching-files/

  4. И, наконец, если это всего лишь ваша тестовая среда, отключите CloudFront, но все вышеперечисленное может позже применяться к вашей производственной среде

...