gpt4 book ai didi

node.js - 从 AWS lambda 执行 shell 命令

转载 作者:行者123 更新时间:2023-12-02 16:25:52 25 4
gpt4 key购买 nike

我正在尝试执行一个 shell 命令以从 AWS lambda 迁移。这个想法是,无论何时我们需要运行迁移,我们都会通过 AWS CLI 调用 lambda。我无法让它运行。运行迁移的命令永远不会被执行,它总是以 null 响应。任何帮助将不胜感激。

这是我的代码:

const exec = require("child_process").exec;
const { okResponse, errorResponse } = require('./response');

exports.handler = async (event) => {
exec("node ./node_modules/db-migrate/bin/db-migrate up --config=./database.json", (error, stdout, stderr) => {
if (error) {
console.error(`error: ${error.message}`);
return errorResponse(500, 'Error running migration.');
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return errorResponse(500, 'Error running migration.');
}
console.log(`stdout: ${stdout}`);
return okResponse(200, 'Migration successfully.');
});
}

最佳答案

我的猜测是因为您使用的是 async lambda handler你的函数在 exec 有机会运行之前完成。因此,您可以使用 promise(如链接文档中所示)来解决此问题。

一个例子是:

const exec = require("child_process").exec;
const { okResponse, errorResponse } = require('./response');

exports.handler = async (event) => {


const promise = new Promise(function(resolve, reject) {

exec("node ./node_modules/db-migrate/bin/db-migrate up --config=./database.json", (error, stdout, stderr) => {
if (error) {
console.error(`error: ${error.message}`);
return errorResponse(500, 'Error running migration.');
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return errorResponse(500, 'Error running migration.');
}
console.log(`stdout: ${stdout}`);
return okResponse(200, 'Migration successfully.');
})
})

return promise
}

请注意,我还没有运行代码,可能需要进一步更改才能使其正常工作。

关于node.js - 从 AWS lambda 执行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64567612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com