首页 > 解决方案 > 在 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.jsbashaws-lambda

解决方案


只要您已经上传node_modules,您只需要在正确的位置运行正确的 elasticdump 脚本。工作的是./node_modules/elasticdump/bin/elasticdump.

请注意,您可以在另一个位置找到脚本./node_modules/.bin/elasticdump,但由于依赖项的位置错误,这个位置将无法工作。


推荐阅读