使用 Angular Material (MatBottomSheet) 和 SSR 时 AWS Lambda 超时
AWS Lambda timeout when using Angular Material (MatBottomSheet) & SSR
经过几个小时的调查,我发现了以下问题:
我的设置:
- Angular 命令行界面 6.0.1
- Angular Material6.0.2
- 无服务器
(+serverless-webpack 5.1.5, +serverless-apigw-binary)
构建步骤:
- 构建(浏览器应用程序)-> 使用默认 CLI 配置
- 使用 Webpack 构建 SSR 服务器
- 构建 Lambda-Server 并将所有源捆绑到一个无服务器包中
到目前为止一切顺利。一切正常,直到我开始使用 MatBottomSheet。
当我在我的组件中注入这个服务时,似乎没有什么特别的。
本地没问题,为开发服务(worked)。创建生产版本并在本地托管它也有效。
将它部署到lambda时发生了奇怪的事情。部署似乎没问题。但是当我通过 AWS 网关调用 lambda 方法时 -> 访问应用程序。
我收到内部服务器错误。
在 lambda 日志中我看到超时。 (我试图将超时时间更改为最多 10 秒,因此将超时时间设置为较短不是问题)。通常渲染整个站点需要 70 毫秒,但是很好。
看起来有无限循环/死锁或循环调用等。material 代码中的任何内容,当与 lambda 无服务器打包时。
我花了几个小时才找到真正的问题所在。贝克。 cloudwatch 和所有其他 AWS 日志都是 rly。当你超时时保持沉默。当我从我的应用程序中删除 MatBottomSheet 时,一切都恢复正常了。
仅供参考:我不必直接使用 MatBottomSheet。将它注入到组件中就足够了。在不注入服务的情况下导入模块,也有效。
我已经尝试过的:
通常我的 lambda 服务器代码使用 expressjs,它被包裹在 aws-express ..
所以我调整了 expressjs 代码 -> 只是 return 静态文件,没有渲染任何东西。 -> 结果没有改变,超时了。
我尝试的下一件事:在本地调用 lambda 方法(使用无服务器)
一切都按预期进行。
我在本地使用了相同的 Nodejs 版本 (8.10),这与 AWS Lambda 使用的版本相同。 -> 超时错误...
如果有人知道如何解决这个问题,那就太棒了。
我的解决方法:在没有 SSR 的情况下使用 lambda,或者不使用 lambda...
谢谢
我解决了问题并想分享我的结果。希望没有人会再遇到这个问题。
调试了一整天的一些捆绑代码。 问题是:我的 lambda 函数需要更少的内存
我为我的 lambda 函数使用了 128Mb 内存。即使我将超时增加到 60 秒,这里也很奇怪。我仍然遇到超时错误。
将内存增加到 192Mb 后,该方法在 1.5 秒内完成。
希望亚马逊改进他们的错误输出。似乎我的 lambda 函数从未完成,运行 当 运行 内存不足时,导致超时
经过几个小时的调查,我发现了以下问题:
我的设置:
- Angular 命令行界面 6.0.1
- Angular Material6.0.2
- 无服务器 (+serverless-webpack 5.1.5, +serverless-apigw-binary)
构建步骤:
- 构建(浏览器应用程序)-> 使用默认 CLI 配置
- 使用 Webpack 构建 SSR 服务器
- 构建 Lambda-Server 并将所有源捆绑到一个无服务器包中
到目前为止一切顺利。一切正常,直到我开始使用 MatBottomSheet。 当我在我的组件中注入这个服务时,似乎没有什么特别的。
本地没问题,为开发服务(worked)。创建生产版本并在本地托管它也有效。
将它部署到lambda时发生了奇怪的事情。部署似乎没问题。但是当我通过 AWS 网关调用 lambda 方法时 -> 访问应用程序。 我收到内部服务器错误。
在 lambda 日志中我看到超时。 (我试图将超时时间更改为最多 10 秒,因此将超时时间设置为较短不是问题)。通常渲染整个站点需要 70 毫秒,但是很好。
看起来有无限循环/死锁或循环调用等。material 代码中的任何内容,当与 lambda 无服务器打包时。
我花了几个小时才找到真正的问题所在。贝克。 cloudwatch 和所有其他 AWS 日志都是 rly。当你超时时保持沉默。当我从我的应用程序中删除 MatBottomSheet 时,一切都恢复正常了。
仅供参考:我不必直接使用 MatBottomSheet。将它注入到组件中就足够了。在不注入服务的情况下导入模块,也有效。
我已经尝试过的:
通常我的 lambda 服务器代码使用 expressjs,它被包裹在 aws-express ..
所以我调整了 expressjs 代码 -> 只是 return 静态文件,没有渲染任何东西。 -> 结果没有改变,超时了。
我尝试的下一件事:在本地调用 lambda 方法(使用无服务器) 一切都按预期进行。
我在本地使用了相同的 Nodejs 版本 (8.10),这与 AWS Lambda 使用的版本相同。 -> 超时错误...
如果有人知道如何解决这个问题,那就太棒了。
我的解决方法:在没有 SSR 的情况下使用 lambda,或者不使用 lambda...
谢谢
我解决了问题并想分享我的结果。希望没有人会再遇到这个问题。
调试了一整天的一些捆绑代码。 问题是:我的 lambda 函数需要更少的内存
我为我的 lambda 函数使用了 128Mb 内存。即使我将超时增加到 60 秒,这里也很奇怪。我仍然遇到超时错误。
将内存增加到 192Mb 后,该方法在 1.5 秒内完成。
希望亚马逊改进他们的错误输出。似乎我的 lambda 函数从未完成,运行 当 运行 内存不足时,导致超时