无服务器(框架)部署“随机”部署损坏的功能,找不到模块

问题描述 投票:0回答:1

背景

我们正在无服务器框架之上运行更大的应用程序,并不断扩大我们的模块和用户群。我们所有的后端代码都位于单一存储库中,由 29 个无服务器服务(微服务)编译而成,由近 300 个 REST 和 WebSocket 端点组成。

我们正在 Github Actions 内进行部署,直到最近(过去几个月、几周)才出现任何问题。

不幸的是,我们的代码永远不会被调用,这使得我们自己的遥测系统也看不到错误。

实际问题

当从 Github Actions“随机”执行

sls deploy
时,1 或 2 个函数似乎按照日志文件部署,但是当我们调用它们时,会记录
Cannot find module
错误。

错误与导入无关,我们可以从下面的堆栈跟踪中调查到它实际上是无服务器函数本身,在函数包中找不到。

2023-10-25T09:52:03.202Z undefined ERROR Uncaught Exception { "errorType": "Runtime.ImportModuleError", "errorMessage": "Error: Cannot find module 's_putAnsweredQuestionnaire'\nRequire stack:\n- /var/runtime/UserFunction.js\n- /var/runtime/Runtime.js\n- /var/runtime/index.js", "stack": [ "Runtime.ImportModuleError: Error: Cannot find module 's_putAnsweredQuestionnaire'", "Require stack:", "- /var/runtime/UserFunction.js", "- /var/runtime/Runtime.js", "- /var/runtime/index.js", " at _loadUserApp (/var/runtime/UserFunction.js:225:13)", " at Object.module.exports.load (/var/runtime/UserFunction.js:300:17)", " at Object.<anonymous> (/var/runtime/index.js:43:34)", " at Module._compile (internal/modules/cjs/loader.js:1114:14)", " at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10)", " at Module.load (internal/modules/cjs/loader.js:979:32)", " at Function.Module._load (internal/modules/cjs/loader.js:819:12)", " at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)", " at internal/main/run_main_module.js:17:47" ] }
详细信息和版本

sls --version Running "serverless" from node_modules Framework Core: 3.22.0 (local) 3.21.0 (global) Plugin: 6.2.2 SDK: 4.3.2
目标:

node14

(静止)

插件:

    无服务器-esbuild
  • 无服务器域管理器
  • 无服务器插件日志保留
  • 无服务器修剪插件
Github Action 也在运行

node14

我们检查了什么

Github Actions 中的日志没有显示任何相关错误。实际上,Github Actions 会因任何部署问题而失败,而 CloudFormation 应该(并且过去已经这样做了)回滚失败的堆栈(服务)。

对于损坏的部署,CloudFormation 的日志不会显示任何错误。看起来堆栈的部署和平常一样。

从开发人员机器部署:如果我们专门从开发人员机器再次部署损坏的服务(检查标签和

sls deploy

以及正确的阶段参数等),它的工作率是 100%。这基本上就是我们现在所做的恢复程序。

无服务器仪表板也不会显示受影响服务周围的任何失败部署。

问题

有人遇到过同样的问题吗?

考虑到我们的应用程序的规模(30 个服务、300 个函数),我们是否会遇到 AWS 中一些我们不明显的限制?

我们可以在哪里继续寻找?

参考文献

amazon-web-services aws-lambda deployment serverless
1个回答
0
投票
这个问题可以通过迁移到无服务器框架的当前

3.38.0

 版本并并行迁移到节点 
16.20.0
 来解决。这当然要求我们转向无服务器中的
nodejs16.x
目标。

由于这些升级部署再次稳定。

不幸的是,由于我们的

nodejs18.x

 依赖性,我们无法移动到 
aws-sdk
 目标。使用 Node 18 需要 AWS-SDKv3。

© www.soinside.com 2019 - 2024. All rights reserved.