AWS Lambda上的cURL发出未找到命令错误

AWS Lambda上的cURL发出未找到命令错误,curl,aws-lambda,Curl,Aws Lambda,从今天开始几个小时,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/BigBuck

从今天开始几个小时,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)"
  ]
}

我尝试使用spawnSync而不是execSync,并且它工作正常

const{spawnSync}=require'child_process'


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

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

const{spawnSync}=require'child_process'


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

最后,我得到了Amazon支持部门及其内部技术团队的确认,基于Amazon Linux 2的AWS Lambda环境中不再包含curl binary。这就是为什么我不能在节点10和节点12中使用execSync或spawnSync执行curl


根据他们的说法,另一种选择是使用请求库。最后,我得到了Amazon支持部门及其内部技术团队的确认,基于Amazon Linux 2的AWS Lambda环境中不再包含CURL binary。这就是为什么我不能在节点10和节点12中使用execSync或spawnSync执行curl


另一种选择是使用请求库

:谢谢。只不过这是在AWS Lambda上,它之前工作的地方。哎呀,AWS确实混淆了事情,但它仍然意味着$PATH变量没有按它应该的方式设置。也许您可以将/usr/bin/curl添加到cmd?还是正确的完整路径?删除以前的评论。祝你好运一如既往;-。卷曲是否已在Lambda中移除或移动到新位置/usr/bin没有卷曲:谢谢。只不过这是在AWS Lambda上,它之前工作的地方。哎呀,AWS确实混淆了事情,但它仍然意味着$PATH变量没有按它应该的方式设置。也许您可以将/usr/bin/curl添加到cmd?还是正确的完整路径?删除以前的评论。祝你好运一如既往;-。卷曲是否已在Lambda中移除或移动到新位置/usr/bin没有curl。因此,根据AWS支持:AWS Node.js 10.x使用Amazon Linux 2,Node.js使用Amazon Linux,因此在共享库中存在差异,这解释了错误,因为一些库安装在新运行时环境的不同路径目录中。根据他们的说法,同步是一种方式,因此我将此标记为正确,以供其他用户查看,但是,spawnsSync没有解决我的下载问题。因此,根据AWS支持:AWS Node.js 10.x使用Amazon Linux 2,Node.js使用Amazon Linux,因此共享库存在差异,这解释了错误,因为一些库安装在新运行时环境的不同路径目录中。根据他们的说法,spawnSync是正确的选择,因此我将此标记为正确的,以供其他用户查看,但是spawnSync没有解决我的下载问题。