【问题标题】:cURL on AWS Lambda gives command not found errorAWS Lambda 上的 cURL 给出命令未找到错误
【发布时间】:2019-11-20 14:40:56
【问题描述】:

从今天开始几个小时,Lambda 上的一个简单 curl 命令失败了。
Lambda环境是NodeJs 10.x(12.x也试过)。

const { execSync } = require('child_process');

exports.handler = async (event) => {
   execSync('curl http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg -o /tmp/BigBuckBunny.jpg');
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

我收到 /bin/sh curl: command not found 错误 知道问题是什么吗?

Response:
{
  "errorType": "Error",
  "errorMessage": "Command failed: curl http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg -o /tmBigBuckBunny.jpg\n/bin/sh: curl: command not found\n",
  "trace": [
    "Error: Command failed: curl http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg -o /tmBigBuckBunny.jpg",
    "/bin/sh: curl: command not found",
    "",
    "    at checkExecSyncError (child_process.js:621:11)",
    "    at execSync (child_process.js:657:15)",
    "    at Runtime.exports.handler (/var/task/index.js:11:4)",
    "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
  ]
}

【问题讨论】:

  • :) 谢谢。只是这是在之前工作的 AWS Lambda 上。
  • 糟糕,AWS 确实使事情变得混乱,但这只是意味着您的 $PATH 变量没有按照应有的方式设置。也许您可以将/usr/bin/curl 添加到cmd? (或正确的完整路径)?删除之前的评论。祝你好运。 (一如既往;-))。
  • curl 是否已被移除或移至 Lambda 中的新位置? /usr/bin 没有 curl。

标签: curl aws-lambda


【解决方案1】:

最后,我得到了 Amazon 支持(及其内部技术团队)的确认,即 CURL 二进制文件不再包含在基于 Amazon Linux 2 的 AWS Lambda 环境中。这就是为什么我无法使用任何一个执行 curl节点 10 和节点 12 中的 execSync 或 spawnSync。

他们的替代方法是使用“请求”库https://github.com/request/request/blob/master/README.md#streaming

【讨论】:

    【解决方案2】:

    我尝试使用 spawnSync 而不是 execSync,它正在工作。

    const {spawnSync} = require('child_process');

    spawnSync 使用进程环境来运行你的命令,而execSync 使用 shell 环境。curl 路径显然没有在 shell 环境中配置。

    【讨论】:

    • 因此,根据 AWS 支持:AWS Node.js 10.x 使用 Amazon Linux 2,Node.js 使用 Amazon Linux,因此共享库存在差异,这解释了错误,因为某些库安装在新运行时环境的不同路径目录。根据他们的说法 spawnSync 是要走的路,所以我将其标记为正确供其他用户查看,但是 spawnsSync 没有解决我的下载问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2020-05-18
    • 2019-05-03
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多