Cloudfront Lambda Egde ошибка? Изменить код статуса ответа в ответе зрителя - PullRequest
0 голосов
/ 23 января 2019

Вопрос в следующем: Почему невозможно изменить http-статус перед ответами на запросы в ViewerResponseEvents в lambda edge?

У меня есть функция Lambda, которая должна проверять каждый отдельный ответ и изменять егоКод состояния, основанный на файле JSON, который есть в моей лямбда-функции.Я развернул эту лямбда-функцию в ответе зрителя , потому что я хочу, чтобы эта функция выполняла перед возвратом каждого отдельного ответа.В документации Aws (https://aws.amazon.com/blogs/networking-and-content-delivery/lambdaedge-design-best-practices/) сказано, что если вы хотите выполнить функцию для всех запросов, ее следует поместить в события средства просмотра.

cloudfront events

Итак, я создал простую функцию, которая в основном заключается в клонировании и изменении кода ответа http перед возвратом.Я сделал этот код для теста:

exports.handler = async (event) => {
 const request = event.Records[0].cf.request;
 console.log(request);
 console.log(`Original response`);
 const response = event.Records[0].cf.response;
 console.log(`Original response`);
 console.log(response);
//clone response just for change the status code
 let cloneResponseReturn = JSON.parse(JSON.stringify(response));
 cloneResponseReturn.status  = 404;
 cloneResponseReturn.statusDescription = 'Not Found';

console.log('Log Clone Response Return');
console.log(cloneResponseReturn);

return cloneResponseReturn;

};

Когда я получаю доступ к журналу в cloudwatch, он показывает, что ответ имеет код http 404, но по какой-то причине cloudfront все еще возвращаетответ с кодом 200.( Я очистил кеш браузеров, протестировал его в других инструментах, таких как почтальон, но во всех них CloudFront возвращает HTTP 200)

Печать CloudWatch Log and Response:

cloud-watch log response

Если я изменю эту функцию для выполнения в исходный ответ , она будет работать, но я нехотите выполнить его ТОЛЬКО в пропущенном кеше (+ поскольку aws говорит нам, что события источника будут выполняться только в этом случае +).Поскольку события источника выполняются только при отсутствии кэша, для выполнения этих перенаправлений мне нужно было бы создать средство блокировки заголовка chache, чтобы гарантировать, что события источника всегда будут выполняться.

Действительно странно такое поведение граничной лямбды.У кого-нибудь есть идеи, как мне это решить?Я уже пытался очистить кеш браузеров и инструментов, которые я использую для проверки запросов, а также очистить кеш моего дистрибутива, но все еще не работает.

Я разместил вопрос на форуме AWS неделю назад, ноЭто все еще без ответа: https://forums.aws.amazon.com/message.jspa?messageID=885516#885516

Заранее спасибо.

...