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

时间:2018-04-29 07:10:50

标签: node.js npm aws-lambda amazon-dynamodb claudiajs

我有一个由DynamoDB流触发的AWS DynammoDB lambda。使用ClaudiJS在JS中完成了所有实现。使用public function handle($request, Closure $next, $guard = null) { $response = $next($request); return $response ->withHeaders([ 'Cache-Control' => 'no-store, no-cache, must-revalidate', 'Pragma'=> 'no-cache', 'Expires' => '0' ]); } } 命令部署lambda时没有问题。

问题是当使用dockerized构建服务器使用GoCD管道部署相同的函数时,在调用lambda函数时发生错误。

Route::group(['middleware' => 'my_auth'], function() {

  // All your routes you want to be secure

});

现在我花了10多个小时,我不知道解决这个问题。有人可以帮助我吗?

Lambda使用Node 6.10,我使用babel转换到节点6.10。 尝试使用claudia createmodule 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) 图像作为Docker的构建器图像。

3 个答案:

答案 0 :(得分:0)

我在这个问题上花了一天多的时间。最后,我尝试了几乎所有可能的方法,最后通过从Serverless切换到ClaudiaJS来解决问题。对于每个人的使用,我将在这里提到我尝试使用结果的方法。

  1. 在GoCD管道使用的构建docker容器中使用相同的localhost环境(相同节点版本,相同的纱线版本,Ubuntu 16:04)。但问题仍然存在。
  2. 删除了docker并将GoCD管道设置为直接在构建服务器上运行(再次使用与本地计算机中使用的相同的节点版本,相同的纱线版本,Ubuntu 16:04)。但是再次没有锁定,问题没有任何改变。
  3. 将本地计算机的node_modules文件夹和构建文件夹提交到git存储库,并使用相同的node_modules并使用GoCD管道构建文件,而不执行yarn并且不在构建服务器上转换代码。但没有改变。
  4. 最后,我切换到无服务器框架。在第一次尝试中,我使用了带有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;
    

答案 1 :(得分:0)

当我的无服务器实例要读取.json文件并从中提取json对象时,会发生此错误。所以我在脚本中创建了json对象作为json对象。然后一切都很好..我使用了webpack.config的基本配置

答案 2 :(得分:0)

让我在开头打个招呼,说我没有使用GoCD的特定经验,但是在其他情况下我遇到了此错误。

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

该错误是一般性错误,表示Lambda函数无法启动。您也可以在AWS内部收到此错误。不幸的是,您在GoCD上看到的日志记录级别似乎与AWS CloudWatch处于同一级别,这不是很好,并且不会告诉您是什么导致Lambda无法启动。您需要更多日志记录以确定您所处情况的确切原因。

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

AWS Lambda Test Dropdown

打开下拉菜单,然后选择“配置测试事件”。 您将需要精心设计此测试以匹配您特定的lambda函数。接下来,选择新测试并单击“测试”按钮。 Lambda会向您显示成功或失败消息,其中包含来自呼叫的详细信息。

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