我希望在AWS Lambda函数中运行elasticdump命令。此程序包通过NPM安装,然后在命令行界面(https://www.npmjs.com/package/elasticdump)上运行。
我处理这个问题的方法是在Node脚本中运行bash脚本。我将其安装到node_modules文件夹的elasticdump中,然后将其作为.zip上传到AWS Lambda。
下面是Node脚本本身,它调用bash脚本可执行文件:
exports.handler = function (event, context, callback) {
const execFile = require('child_process').execFile;
execFile('./run-elasticdump.sh', (error, stdout, stderr) => {
if (error) {
callback(error);
}
callback(null, stdout);
});
}bash脚本本身尝试运行同样位于node_modules文件夹中的elasticdump命令:
run-elasticdump.sh
elasticdump \
--input=http://es.com:9200/template-filter \
--output=templates.json \
--type=template下面是文件夹结构:
run-elasticdump
- node_modules
-- elasticdump
-- ...
- package.json
- index.js
- run-elasticdump.sh当我运行lambda时,我收到以下错误:
"elasticdump: command not found",
"",
" at ChildProcess.exithandler (child_process.js:308:12)",
" at ChildProcess.emit (events.js:315:20)",
" at maybeClose (internal/child_process.js:1048:16)",
" at Socket.<anonymous> (internal/child_process.js:439:11)",
" at Socket.emit (events.js:315:20)",
" at Pipe.<anonymous> (net.js:673:12)"
]我相信这是因为安装在node_modules文件夹中的elasticdump包在bash运行时无法识别。
对于如何解决这个问题,有什么想法或建议吗?
发布于 2021-10-20 15:38:28
只要你已经上传了node_modules,你只需要在合适的位置运行合适的elasticdump脚本。可以工作的是./node_modules/elasticdump/bin/elasticdump。
请注意,您可能会在另一个位置找到脚本./node_modules/.bin/elasticdump,但由于依赖项的位置错误,此位置将无法工作。
https://stackoverflow.com/questions/67386185
复制相似问题