【发布时间】:2020-03-28 14:08:15
【问题描述】:
这是我的 Lambda 函数中引发错误的行:
// running in Node 8
const { execSync } = require('child_process');
execSync('curl https://github.com');
我正在尝试将我的 Lambda 函数从节点 8 升级到节点 10 或节点 12,因为 Lambda 上的节点 8 将在 2019 年 12 月结束时被弃用(因此我将无法更新它)。但是,当我深入研究 CloudWatch 日志时,我看到了以下错误:
bin/sh: curl: command not found
当我将 Lambda 函数更新为仅运行 which curl 时,我收到了类似的错误:
bin/sh: which: command not found
根据文档here,我知道 Node 8+、Python 3.8+ 和 Java 11+ 正在使用新的 AWS Lambda Runtime、Amazon Linux 2。
感谢任何帮助。
【问题讨论】:
-
你为什么要通过子进程进行卷曲,而不是从 axios 或请求中调用 GET?甚至使用原生的 http/https npm 模块?
-
我们有不同的开发环境,它们依赖于 Node 中使用的底层应用程序,使用 curl 我们可以在大多数系统上独立于 Node.js 开发该应用程序。此外,我们正在通过应用程序的其余部分在命令行级别做很多工作。
-
当然...但是使用 Node 仍然应该遵循良好的包依赖管理。你的 CI/CD 管道应该处理一致性。无论如何,这与您最初的问题有所不同……对此我没有很好的回应。我想如果你使用 Linux 特定工具(即 curl 或 ssh),你总是会遇到基本 Linux 映像的问题,因为它们试图尽可能精简和平均。
标签: node.js amazon-web-services curl aws-lambda amazon-linux-2