Node.js AWS Lambda:模块初始化错误:Object.fs.openSync(fs.js:641:18)处的错误(本机)

Node.js AWS Lambda:模块初始化错误:Object.fs.openSync(fs.js:641:18)处的错误(本机),node.js,npm,aws-lambda,amazon-dynamodb,claudiajs,Node.js,Npm,Aws Lambda,Amazon Dynamodb,Claudiajs,我有一个AWS DynamoDB lambda,它由DynamoDB流触发。所有的实现都是在JS和ClaudiJS中完成的。使用claudiacreate命令部署lambda时,没有问题 问题在于,当使用停靠的构建服务器使用GoCD管道部署相同的函数时,调用lambda函数时会发生以下错误 module initialization error: Error at Error (native) at Object.fs.openSync (fs.js:641:18) at Object.fs.r

我有一个AWS DynamoDB lambda,它由DynamoDB流触发。所有的实现都是在JS和ClaudiJS中完成的。使用
claudiacreate
命令部署lambda时,没有问题

问题在于,当使用停靠的构建服务器使用GoCD管道部署相同的函数时,调用lambda函数时会发生以下错误

module initialization error: Error
at Error (native)
at Object.fs.openSync (fs.js:641:18)
at Object.fs.readFileSync (fs.js:509:33)
at Object.Module._extensions..js (module.js:578:20)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
现在我已经花了10多个小时,我不知道如何解决这个问题。有人能帮我吗

Lambda使用节点6.10,我使用babel传输到节点6.10。
尝试使用
node:borbon
ubuntu:16.04
图像作为Docker的构建器图像

我在这个问题上花了一天多的时间。最后,我尝试了几乎所有可能的方法,最终通过切换到从解决了问题。为了供大家使用,我将在这里提到我尝试过的方法和结果

  • 在GoCD管道使用的build docker容器中使用了相同的本地主机环境(相同的节点版本,相同的纱线版本,Ubuntu 16:04)。但问题仍然存在
  • 删除docker并将GoCD管道设置为直接在构建服务器上运行(再次使用与我在本地机器中使用的相同节点版本、相同纱线版本、Ubuntu 16:04)。但还是没有锁,问题就在那里,没有任何变化
  • 将我的本地计算机的node_modules文件夹和build文件夹提交到git存储库,并使用GoCD管道中的相同node_模块和build文件,而无需执行
    warn
    ,也无需在构建服务器上传输代码。但一切都没有改变
  • 最后,我切换到无服务器框架。在第一次尝试中,我使用了带babel和不带webpack的Serverless,尽管建议使用webpack。但是,当lambda与管道一起部署时,同样的问题再次出现。我将配置更改为将webpack与无服务器一起使用。然后,所有问题都得到解决,lambda成功部署。这是我最后使用的
    webpack.config.js

    const path = require('path');
    
    const slsw = require('serverless-webpack');
    const nodeExternals = require('webpack-node-externals');
    
    const build = {
      entry: slsw.lib.entries,
      resolve: {
        extensions: ['.js'],
      },
      target: 'node',
      output: {
        libraryTarget: 'commonjs',
        path: path.join(__dirname, '.webpack'),
        filename: '[name].js',
      },
      module: {
        rules: [
          {
            test: /\.js$/,
            exclude: /node_modules/,
            use: [
              {
                loader: 'babel-loader',
              },
            ],
          },
        ],
      },
      mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
      optimization: {
        // Do not minimize the code.
        minimize: false,
      },
      performance: {
        // Turn off size warnings for entry points
        hints: false,
      },
      externals: [nodeExternals()],
    };
    
    module.exports = build;
    

    当我的无服务器实例要读取.json文件并从中提取json对象时,会发生此错误。所以我在脚本中创建了json对象作为json对象。然后一切都很好。。我使用了webpack.config的基本配置,让我先说一下,我没有使用GoCD的具体经验,但我在其他上下文中遇到了这个错误

    此错误的一个潜在原因是将代码部署到VM时出现文件权限问题。

    该错误是一个一般性错误,意味着Lambda函数无法启动。您也可以在AWS内部收到此错误。不幸的是,您在GoCD中看到的日志记录级别似乎与AWS CloudWatch处于同一级别,这不是很好,并且没有告诉您是什么阻止了Lambda启动。您需要更多的日志记录来确定具体的原因

    如果在AWS中确实遇到此错误,请打开Lambda函数。在AWS页面的顶部应该有一个下拉列表,旁边有一个“测试”按钮

    打开下拉列表并选择“配置测试事件”。您必须设计此测试以匹配特定的lambda功能。接下来,选择新测试并单击“测试”按钮。Lambda将向您显示一条成功或失败消息,其中包含通话的详细信息


    在我的例子中,我们使用AWS
    sam
    实用程序在linux机器上编写了上载脚本,文件权限不太正确(错误是“权限被拒绝,打开'/var/task/index.js')。

    您是如何读取该文件的?无论如何,我提到的错误发生在实际代码开始执行之前。看来你的案子和我的不一样。不,快递服务器当然不会启动。它找不到配置文件(config.json)。因此,我在节点源中添加了配置json对象作为json对象是的,您是正确的。但这里的问题是我没有这样的文件。引发此异常是因为它试图在lambda函数中读取文件。因此,我没有读取文件,而是将文件的内容放在节点脚本中