gpt4 book ai didi

node.js - 捕获 NodeJS Lambda 生成的进程的输出

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:12 24 4
gpt4 key购买 nike

我正在 try catch 从用 NodeJS 编写的 AWS Lambda 启动的外部程序的输出。下面是完整的示例代码。任何测试事件都可以,因为它没有被真正使用。

exports.handler = async (event) => {
console.log ("Entering lambda" + JSON.stringify(event))

var spawn = require('child_process').spawnSync;

child_process = spawn ('aws', [' --version'], {
stdio: 'inherit',
stderr: 'inherit',
shell: true
})

console.log ("done");
const response = {
statusCode: 200,
body: JSON.stringify('done'),
};
return response;
};

当我运行它时,我得到以下输出(为了简洁起见,我删除了测试事件详细信息,因为它不相关)。

没有看到的是我预期的aws --version命令的结果(我用它来测试AWS的正确调用) CLI,但任何 Linux 命令都可以)。代码确实同步执行,因为如果我用 child_process = spawn ('sleep', ['1'], {) 替换调用,lambda 的执行时间将增长到 1117.85 毫秒,所以发生了一秒钟的 sleep 。但是执行日志中没有捕获任何内容。

START RequestId: 0c1287e2-d2ee-4436-a577-bc8ec3608120 Version: $LATEST
2019-01-16T19:12:45.130Z 0c1287e2-d2ee-4436-a577-bc8ec3608120 Entering lambda {...}
2019-01-16T19:12:45.143Z 0c1287e2-d2ee-4436-a577-bc8ec3608120 done
END RequestId: 0c1287e2-d2ee-4436-a577-bc8ec3608120
REPORT RequestId: 0c1287e2-d2ee-4436-a577-bc8ec3608120 Duration: 13.29 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 20 MB

我做错了什么吗?或者是否有其他方法可以捕获用 NodeJS 编写的 Lambda 的输出(状态代码、stdio、stderr)?

最佳答案

这对我有用(node.js 8.10 运行时)


exports.handler = async (event) => {
const spawnSync = require('child_process').spawnSync;
const process = spawnSync('echo', ['hello', 'world'], {
stdio: 'pipe',
stderr: 'pipe'
});
console.log(process.status);
console.log(process.stdout.toString());
};

尝试使用 aws 运行时,会引发 ENOENT 错误。换句话说,该命令不可用。正如@jarmod 的问题评论中提到的,我还相信 awscli 在 Lambda 容器中不可用。

可用的是 SDK,因此您可以require('aws-sdk');,而无需将其捆绑到您的 Lambda 部署包。

关于node.js - 捕获 NodeJS Lambda 生成的进程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54223979/

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