AWS CloudFront + Lambda@Edge «Вывод JSON не поддается синтаксическому анализу»

У меня есть функция Lambda (упакованное приложение next.js), к которой я пытаюсь получить доступ через CloudFront. Веб-приложение работает пока не Я пытаюсь перейти на главную страницу.

Когда я нажимаю /search или /video/{videoId}, страница загружается нормально.

Когда я пытаюсь попасть на домашнюю страницу, я получаю следующую страницу с ошибкой:

502 ERROR
The request could not be satisfied.
The Lambda function returned invalid JSON: The JSON output is not parsable. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
Generated by cloudfront (CloudFront)
Request ID: {id}

Почему только домашняя страница может быть недействительной JSON? Где я могу увидеть этот JSON, чтобы определить, что не так? Я создал фиктивный тест запроса Cloudfront в функции Lambda, и он просто успешно возвращается.

Какие журналы есть в облачных часах для лямбда?

curious_coder 19.03.2022 07:55

@curious_coder просто отображает нормальный вывод успешной функции. (Похоже, что комментарии — не лучшее место для обмена логами/кодом) 2022-03-18T13:02:36.082-07:00 START RequestId: b1458ffd-f1ee-4390-9735-666a3302096d Версия: $LATEST 2022-03-18T13 :02:36.370-07:00 2022-03-18T20:02:36.369Z b1458ffd-f1ee-4390-9735-666a3302096d INFO {настраиваемый оператор ведения журнала} 2022-03-18T13:02:36.370-07:00 2022-03- 18T20:02:36.370Z b1458ffd-f1ee-4390-9735-666a3302096d INFO {настраиваемый оператор ведения журнала} 2022-03-18T13:02:38.982-07:00 END RequestId: b1458ffd-f1ee-4390-9735-666a6d302000

John D. 20.03.2022 18:40

Каков фактический код лямбда-функции и где и как воспроизвести вашу ошибку?

Marcin 22.03.2022 01:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема возникла из-за ограничения размера ответов CloudFront Lambda@Edge в 1 МБ. Я не осознавал, что рендеринг на стороне сервера Next.js создавал большой тег <script id = "__NEXT_DATA__"> на моей домашней странице, в котором вся информация, полученная из моего API, дублировалась несколько раз. Это привело к тому, что домашняя страница моего приложения стала> 2 МБ.

Я реорганизовал свое приложение, чтобы отправить только один сетевой запрос, и убедился, что данные помещаются в тег __NEXT_DATA__ только один раз. Приложение теперь работает.

Чтобы увидеть проблемный JSON, перейдите в Lambda, Test и создайте функцию, используя Cloudfront Response Generation, и измените значение request.uri на любой URL-адрес, который вы хотите нажать. Это покажет вам ответ, с которым работает Cloudfront.

John D. 23.03.2022 19:26

Другие вопросы по теме