Iam*_*ale 2 amazon-web-services node.js aws-lambda
我正在尝试执行 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.');
});
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是,因为您使用的是异步 lambda 处理程序,所以您的函数在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
}
Run Code Online (Sandbox Code Playgroud)
请注意,我尚未运行该代码,可能需要进一步更改才能使其正常工作。
| 归档时间: |
|
| 查看次数: |
5070 次 |
| 最近记录: |