Вам не нужен шаг 1.
Белый список cookie для пересылки к источнику в поведении кэша. Это заставляет CloudFront кэшировать отдельную копию каждой страницы, основываясь на значении cookie. В любом случае вам это понадобится, если ваш источник сможет увидеть файл cookie.
В Lambda @ Edge есть триггеры на стороне просмотра (перед кэшем) и триггеры на стороне источника (за кэшем).
Триггер ответа источника может видеть ответ, полученный от источника, но также может видеть запрос, отправленный источнику.
запрос
Ответ источника - запрос, который CloudFront направил источнику и который мог быть изменен функцией Lambda, который был вызван событием запроса источника
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#lambda-event-structure-response
Нет простого способа отправить информацию из триггера запроса средства просмотра в триггер ответа источника, поскольку они находятся на противоположных сторонах кэша и не могут напрямую взаимодействовать.
Ваш обработчик будет передан event
.
Все, что вам нужно, находится в event.Records[0].cf
.
const cf = event.Records[0].cf;
Ответ находится в cf.response
, а запрос в cf.request
.
Если статус ответа не 404, выведите из строя исходный триггер ответа и разрешите CloudFront продолжить обработку.
if(cf.response.status != "404')
{
return callback(null, cf.response);
}
В противном случае извлеките файл cookie из cf.request.headers.cookie
(вам нужно будет проанализировать этот массив после проверки его существования - если браузер не предоставил файлы cookie, он не будет генерировать пользовательский ответ на основе файла cookie). и верните его.
См. Сгенерированные ответы - Примеры , чтобы узнать, как вернуть сгенерированный ответ.
Поскольку вы генерируете ответ в триггере исходного ответа, он будет сохранен в кеше в соответствии со значением Минимальное время кэширования ошибок (по умолчанию 5 минут).