Одиночный вызов функции Lambda @ Edge как для запроса зрителя, так и для ответа зрителя - PullRequest
0 голосов
/ 20 сентября 2018

В настоящее время у меня есть две функции Lambda @ Edge:

  • language-redirect: вызывается по запросу средства просмотра, возвращает 302 или передает запрос в CloudFront
  • HSTS: вызывается поответ зрителя добавляет заголовок ответа

Текущий поток:

viewer request -> language-redirect

if 302 -> viewer response
if not 302 -> pass on to CloudFront -> HSTS -> viewer response

Можно ли объединить обе функции в одну (объединенную), которая вызывается только один раз зазапрос зрителя?

viewer request -> combined

if 302 -> viewer response
if not 302 -> pass on to CloudFront -> combined -> viewer response

Цель состоит в том, чтобы одна и та же функция вызывалась один раз, а одна и та же функция не вызывалась дважды.

1 Ответ

0 голосов
/ 21 сентября 2018

В улучшении Lambda @ Edge CloudFront есть 4 различных триггерных события.Их взаимодействие с кешем выделено жирным шрифтом и становится важным позже:

  • Viewer Request - срабатывает при каждом запросе до проверки кеша по прибытии запроса; самопроизвольно сгенерированный ответ не кэшируется
  • Исходный запрос - срабатывает только при пропадании кэша до того, как запрос переходит к источнику; если этот триггер генерирует ответ, HTTP-запрос не отправляется источнику, и ответ будет сохранен в кеше, если кешируется
  • Origin Response - срабатывает только при пропадании кеша, когдаответ возвращается из источника до того, как ответ будет проверен на кешируемость и сохранен в кеше; если этот триггер изменяет ответ, то измененный ответ - это то, что хранится в кэше, если кешируется
  • Ответ зрителя - срабатывает непосредственно перед возвратом ответа зрителю, независимо от того, был ли кэш попадать или отсутствовать; любые модификации ответа, выполненного этим триггером, не кэшируются

Одна лямбда-функция, правильно написанная для понимания того, где она была запущена в цикле транзакций, может быть запущена в любой момент.комбинация этих точек - но поскольку все эти события происходят в разное время , невозможно обработать более одного события одним вызовом функции триггера.

Однако , обратите внимание на пункты, выделенные жирным шрифтом выше.Во многих случаях вы можете существенно уменьшить количество вызовов триггеров, используя триггеры на стороне источника.Как отмечалось выше, использование этих триггеров приводит к тому, что ответ триггеров кешируется - поэтому, когда срабатывает триггер перенаправления, если он генерирует перенаправление, перенаправление может быть кэшировано, и следующий запрос не должен вызывать триггер ввсе.Точно так же добавление вашего заголовка HSTS к кешируемому ответу в триггере ответа источника означает, что будущие попадания в кеш вернут измененный ответ с заголовками HSTS без срабатывания триггера.

...