使用Angular Material(MatBottomSheet)时的AWS Lambda超时& SSR

时间:2018-05-20 14:37:50

标签: angular aws-lambda angular-material angular-universal serverless

经过调查,我发现了以下问题:

我的设置:

  • Angular CLI 6.0.1
  • Angular Material 6.0.2
  • 无服务器 (+ serverless-webpack 5.1.5,+ serverless-apigw-binary)

构建步骤:

  • 构建(浏览器应用) - >使用默认的CLI配置
  • 使用Webpack构建SSR服务器
  • 构建Lambda-Server并将所有源捆绑为无服务器包

到目前为止一切顺利。一切顺利,直到我开始使用MatBottomSheet。 当我在我的组件中注入此服务时,似乎并不特别。

在当地没有问题,为发展服务(工作)。创建一个生产版本并在本地托管它也有效。

将它部署到lambda时发生了奇怪的事情。部署似乎没问题。但是当我通过AWS Gateway调用lambda方法时 - >访问该应用程序。 我收到了内部服务器错误。

在lambda日志中,我看到我有一个超时。 (我试图将超时时间更改为10秒,因此设置为短时间不是问题)。通常需要70ms来渲染整个网站,但很好。

看起来有一个无限循环/死锁或循环调用等等。无论在材料代码中,什么是无服务器为lambda打包。

花了我几个小时才找到实际问题所在。 BEC。 cloudwatch和所有其他AWS日志都很合适。你得到暂停时保持沉默。当我从我的应用程序中删除MatBottomSheet时,一切都有效。

仅供参考:我不必直接使用MatBottomSheet。在组件中注入它就足够了。在不注入服务的情况下导入模块也很有效。

我已尝试过的内容:

通常我的lambda服务器代码使用expressjs,它包含在aws-express中.. 所以我改编了expressjs代码 - >只是为了返回静态文件,而不渲染任何东西。 - >结果没有改变,我有一个超时。

我尝试了下一件事:在本地调用lambda方法(使用无服务器) 一切都按预期工作。

我在本地使用了相同的Nodejs版本(8.10),这与AWS Lambda使用的版本相同。 - >超时错误...

如果有人知道如何解决这个问题,那真的很棒。

我的解决方法:使用没有SSR的lambda,或者不使用lambda ...

感谢

1 个答案:

答案 0 :(得分:2)

我解决了问题并希望分享我的结果。希望没有人会再遇到这个问题了。

整天调试一些捆绑代码。 问题是:我的lambda函数需要更少的内存

我为lambda函数使用了128Mb内存。即使我将超时时间增加到60秒,这里也很奇怪。我仍然有超时错误。

将内存增加到192Mb后,方法在1.5秒内完成。

希望亚马逊能够改善他们的错误输出。似乎我的lambda函数从未完成,在内存不足时运行,导致超时