Лямбда-тайм-аут AWS при использовании углового материала (MatBottomSheet) и SSR - PullRequest
0 голосов
/ 20 мая 2018

После изучения часов я обнаружил следующую проблему:


Мои настройки:

  • Угловой CLI 6.0.1
  • Угловой материал 6.0.2
  • Без сервера (+ serverless-webpack 5.1.5, + serverless-apigw-binary)

шаги сборки:

  • Сборка (приложение для браузера) -> использование конфигурации CLI по умолчанию
  • Сборка сервера SSR с помощью Webpack
  • Сборка Lambda-Server и объединение всех источников в безсерверный серверПакет

Пока все хорошо.Все работало, пока я не начал использовать MatBottomSheet.Когда я внедрил эту Службу в свой компонент, мне кажется, что ничего особенного.

Локально проблем не было, служил для разработки (работал).Создание производственной сборки и размещение ее локально также работало.

При развертывании в lambda произошла странная вещь.Развертывание вроде бы в порядке.Но когда я вызвал лямбда-метод через AWS Gateway -> для доступа к приложению.Я получил внутреннюю ошибку сервера.

В лямбда-логах я увидел тайм-аут.(Я пытался изменить время ожидания до 10 с, поэтому установка короткого периода не была проблемой).Обычно на рендеринг всего сайта уходило 70 мс, но это хорошо.

Похоже, что существует бесконечный цикл / тупик или циклический вызов и т. Д., Что угодно в коде материала, когда он упакован без сервера для лямбды.

Потребовалось несколько часов, чтобы выяснить, где была настоящая проблема.Bec.CloudWatch и все другие журналы AWS являются Rly.молчи, когда у тебя тайм-аут.Когда я удалил MatBottomSheet из моего приложения, все снова заработало.

К вашему сведению: мне не пришлось использовать MatBottomSheet напрямую.Впрыскивать его в компонент было достаточно.Импортирование модуля без внедрения службы также работало.

То, что я уже пробовал:

Обычно мой код лямбда-сервера использует expressjs, который заключен в aws-express ..
, поэтому я адаптировал код expressjs -> просто для возврата статических файлов, ничего не рендерив.-> Результат не изменился, я получил тайм-аут.

Следующее, что я попробовал: локальный вызов метода лямбда (без сервера), все работало как ожидалось.

Я использовал те же Nodejsверсия (8.10) локально, которая является той же версией, что и AWS Lambda.-> ошибка тайм-аута ...

Если у кого-то есть идея, как решить эту проблему, это будет действительно здорово.

Мой обходной путь: используйте лямбду без SSR или не используйте лямбду ...

спасибо

1 Ответ

0 голосов
/ 20 мая 2018

Я решил проблему и хочу поделиться своими результатами.Надеюсь, никто больше не получит эту проблему.

После отладки в течение всего дня некоторого связанного кода. Проблема была в том, что моей лямбда-функции требовалось меньше памяти

Я использовал 128 Мб памяти для своей лямбда-функции.Странная вещь здесь, даже если я увеличил время ожидания до 60 секунд.я все еще получаю сообщение об ошибке тайм-аута.

После увеличения памяти до 192 МБ метод завершился за 1,5 секунды.

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

...