Angular AWS Lambda使用角材料(垫板)时超时&;固态继电器

Angular AWS Lambda使用角材料(垫板)时超时&;固态继电器,angular,aws-lambda,angular-material,angular-universal,serverless,Angular,Aws Lambda,Angular Material,Angular Universal,Serverless,经过数小时的调查,我发现了以下问题: 我的设置: Angular CLI 6.0.1 角材料6.0.2 无服务器 (+无服务器网页包5.1.5,+无服务器apigw二进制文件) 构建步骤: 生成(浏览器应用)->使用默认CLI配置 用Webpack构建SSR服务器 构建Lambda服务器并将所有源捆绑到一个无服务器包中 到目前为止还不错。在我开始使用MatBottomSheet之前,一切都正常。 当我在我的组件中注入此服务时,似乎没有什么特别之处 当地没有问题,为发展服务(工作)。

经过数小时的调查,我发现了以下问题:


我的设置:

  • Angular CLI 6.0.1
  • 角材料6.0.2
  • 无服务器 (+无服务器网页包5.1.5,+无服务器apigw二进制文件)

构建步骤:

  • 生成(浏览器应用)->使用默认CLI配置
  • 用Webpack构建SSR服务器
  • 构建Lambda服务器并将所有源捆绑到一个无服务器包中

到目前为止还不错。在我开始使用MatBottomSheet之前,一切都正常。 当我在我的组件中注入此服务时,似乎没有什么特别之处

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

将其部署到lambda时发生了奇怪的事情。部署似乎还可以。但是当我通过AWS网关->调用lambda方法来访问应用程序时。 我有一个内部服务器错误

在lambda日志中,我看到我超时了。(我尝试将超时时间更改为10秒,因此将a设置为短时间不是问题)。正常情况下,渲染整个站点需要70毫秒,但效果良好

似乎存在无止境的循环/死锁或循环调用等。。材料代码中的任何内容,当与lambda的无服务器包装时

我花了几个小时才找到真正的问题所在。贝克。cloudwatch和所有其他AWS日志都是免费的。当你得到一个超时时,保持沉默。当我从我的应用程序中删除MatBottomSheet时,一切又开始工作了

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

我已经尝试过的:

通常我的lambda服务器代码使用expressjs,它被包装在aws express中。
因此,我修改了expressjs代码->以返回静态文件,而不渲染任何内容。->结果没有改变,我得到了一个超时

我尝试的下一件事是:在本地调用lambda方法(使用无服务器) 一切如期进行

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

如果有人知道如何解决这个问题,那就太棒了

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


谢谢

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

经过一整天的调试,一些捆绑的代码问题是:我的lambda函数必须减少内存

我的lambda函数使用了128Mb内存。奇怪的是,即使我将超时时间增加到60秒。我仍然有一个超时错误

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


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

您是否尝试向lambda添加一些日志以查看它的执行情况?是的,我尝试过。Serverless with(Serverless webpack)将整个服务器脚本+angular通用服务器代码+所有模块捆绑在一个文件中。这使得调试整个代码变得非常困难。理论上,lambda调用的唯一方法是导出的handler方法。在编写时,我删除了对服务器端渲染的调用(代码仍在脚本中,但从未调用过)。。。我也有同样的暂停时间。似乎捆绑的代码破坏了lambda executen。我知道很难找到确切的问题所在。如果能够为nodejs调试lambda会更容易…即使是192MB也发生在我身上。同样重要的是要记住,AWS Lambda根据函数内存大小按比例分配CPU功率,因此如果选择更大的内存,您的响应时间可能会减少