У меня есть функция 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 просто отображает нормальный вывод успешной функции. (Похоже, что комментарии — не лучшее место для обмена логами/кодом) 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
Каков фактический код лямбда-функции и где и как воспроизвести вашу ошибку?
Проблема возникла из-за ограничения размера ответов CloudFront Lambda@Edge в 1 МБ. Я не осознавал, что рендеринг на стороне сервера Next.js создавал большой тег <script id = "__NEXT_DATA__">
на моей домашней странице, в котором вся информация, полученная из моего API, дублировалась несколько раз. Это привело к тому, что домашняя страница моего приложения стала> 2 МБ.
Я реорганизовал свое приложение, чтобы отправить только один сетевой запрос, и убедился, что данные помещаются в тег __NEXT_DATA__
только один раз. Приложение теперь работает.
Чтобы увидеть проблемный JSON, перейдите в Lambda, Test и создайте функцию, используя Cloudfront Response Generation, и измените значение request.uri на любой URL-адрес, который вы хотите нажать. Это покажет вам ответ, с которым работает Cloudfront.
Какие журналы есть в облачных часах для лямбда?