![](/img/trans.png)
[英]module initialization error: Error at Object.fs.openSync (fs.js:646:18) at Object.fs.readFileSync (fs.js:551:33)
[英]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:boron
和ubuntu:16.04
圖像作為Docker的構建器映像。
我在這個問題上花了一天多的時間。 最后,我嘗試了幾乎所有可能的方法,最后通過從ClaudiaJS切換到Serverless來解決問題。 對於每個人的使用,我將在這里提到我嘗試使用結果的方法。
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頁面的頂部,應該有一個下拉列表旁邊有一個“測試”按鈕。
打開下拉列表,然后選擇“配置測試事件”。 您必須制作此測試以匹配您的特定lambda函數。 接下來,選擇新測試並單擊“測試”按鈕。 Lambda將顯示成功或失敗消息,其中包含來自呼叫的詳細信息。
在我的例子中,我們使用AWS sam
實用程序在linux機器上編寫了上傳腳本,並且文件權限不太正確(錯誤是關於“權限被拒絕,打開'/var/task/index.js'”) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.