node.js - 在 AWS Lambda 中运行 elasticdump(节点可执行文件)
问题描述
我希望elasticdump
在 AWS Lambda 函数中运行该命令。该软件包通过 NPM 安装,然后在 CLI ( https://www.npmjs.com/package/elasticdump ) 上运行。
我解决这个问题的方法是在 Node 脚本中运行一个 bash 脚本。我安装到elasticdump
文件node_modules
夹中,然后将其作为 .zip 上传到 AWS Lambda。
这是调用 bash 脚本可执行文件的 Node 脚本本身:
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 脚本本身尝试运行该文件夹中的elasticdump
命令:node_modules
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)"
]
我相信这是因为在 bash 运行时无法识别文件夹中elasticdump
安装的包。node_modules
关于如何解决这个问题的任何想法或建议?
解决方案
只要您已经上传node_modules
,您只需要在正确的位置运行正确的 elasticdump 脚本。工作的是./node_modules/elasticdump/bin/elasticdump
.
请注意,您可以在另一个位置找到脚本./node_modules/.bin/elasticdump
,但由于依赖项的位置错误,这个位置将无法工作。
推荐阅读
- azure - 如何为 Azure Kubernetes 集群创建 TCP/IP 负载均衡器/应用程序网关
- javascript - React axios put请求返回错误500
- sql-server - 如何排除主数据库
- docker - 当 github 帐户使用 2 因子身份验证时,是否可以将 Jenkins Webhooks 与 Github 一起使用
- javascript - Html Canvas - 仅在 X 或 Y 轴上移动对象
- java - JTextPane 中消失的组件
- ios - Appium 在 iPhone 模拟器上启动失败,在设备上成功
- json - DRF:您能否将一个 JSON 键:值对反序列化为多个字段
- c# - 使用 xlPasteSpecial.Values 的正确方法是什么?
- ruby-on-rails - 如何创建 Rails 表单以批量创建记录,每个记录都包含直接上传到 S3 的 Active Storage 附件?