簡體   English   中英

AWS Lambda:模塊初始化錯誤:Object.fs.openSync錯誤(本機)錯誤(fs.js:641:18)

[英]AWS Lambda: module initialization error: Error at Error (native) at Object.fs.openSync (fs.js:641:18)

我有一個AWS DynammoDB lambda,它由DynamoDB流觸發。 使用ClaudiJS在JS中完成了所有實現。 使用claudia create命令部署lambda時沒有問題。

問題是當使用dockerized構建服務器使用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使用Node 6.10,我使用babel轉換到節點6.10。 嘗試使用node:boronubuntu:16.04圖像作為Docker的構建器映像。

我在這個問題上花了一天多的時間。 最后,我嘗試了幾乎所有可能的方法,最后通過從ClaudiaJS切換到Serverless來解決問題。 對於每個人的使用,我將在這里提到我嘗試使用結果的方法。

  1. 在GoCD管道使用的構建docker容器中使用相同的localhost環境(相同節點版本,相同的紗線版本,Ubuntu 16:04)。 但問題仍然存在。
  2. 刪除了docker並設置GoCD管道直接在構建服務器上運行(再次使用相同的節點版本,相同的紗線版本,Ubuntu 16:04,就像我在本地機器中使用的那樣)。 但是再次沒有鎖定,問題沒有任何改變。
  3. 將本地計算機的node_modules文件夾和構建文件夾提交到git存儲庫,並使用相同的node_modules並使用GoCD管道構建文件,而不執行yarn並且不在構建服務器上轉換代碼。 但沒有改變。

最后,我切換到無服務器框架。 在第一次嘗試中,我使用了帶有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頁面的頂部,應該有一個下拉列表旁邊有一個“測試”按鈕。

AWS Lambda測試下拉列表

打開下拉列表,然后選擇“配置測試事件”。 您必須制作此測試以匹配您的特定lambda函數。 接下來,選擇新測試並單擊“測試”按鈕。 Lambda將顯示成功或失敗消息,其中包含來自呼叫的詳細信息。

在我的例子中,我們使用AWS sam實用程序在linux機器上編寫了上傳腳本,並且文件權限不太正確(錯誤是關於“權限被拒絕,打開'/var/task/index.js'”) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM