javascript - 在 Lambda 中使用 child_process 时 AWS API Gateway 立即超时

标签 javascript node.js amazon-web-services aws-lambda aws-api-gateway

我有一个使用 API 网关调用的 Lambda 函数。当 Lambda 命中 child_process 对象上的 spawn 调用时,API 网关立即失败并出现 504 超时错误。我在 API 网关上的超时设置最长为 30 秒,而 Lambda 设置为一分钟。 lambda 运行最多只需要 1400ms,但它仍然在 API 中报告超时。 API网关得到504后,Lambda运行成功。

这发生在调用 FFMPEG 和调用以使用 Sharp 库调整图像大小的过程中。无论我使用同步调用还是异步调用,都会发生这种情况。

function resizeVideo(next) {
    var ffmpegOutput = exec.spawnSync('ffmpeg', [
        '-i', tmpFilePath,
        '-f', 'image2',
        '-frames:v', '1',
        '-filter:v', 'scale=w=-1:h=' + MAX_HEIGHT + ":force_original_aspect_ratio=decrease",
        'pipe:1'
    ]);

    console.log(ffmpegOutput.stderr);

    next(null, JPG_CONTENT_TYPE, ffmpegOutput.stdout);
}

如有任何想法,我们将不胜感激。谢谢!

最佳答案

OP 的同事在这里。我们得到了这个工作,我只是想发帖以防它帮助其他人解决这个问题。我的理解是,发生这种情况是因为超时被错误地设置为一个较低的数字 (180),错误地认为该数字是秒。在意识到应该以毫秒为单位指定值后,我们更新了超时(最大值为 29000),但没有意识到我们必须“部署”API 才能使更改生效。重新部署 API 后,问题已解决。

关于javascript - 在 Lambda 中使用 child_process 时 AWS API Gateway 立即超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827789/

相关文章:

sql - 如何使用 $or 和 $and 在 sequelize 查询中创建动态 where 子句

amazon-web-services - 在 AWS Lambda 中处理事件之前,是否有一种惯用的方法来聚合事件?

amazon-web-services - Cloudformation Yaml 内在函数 完整函数名称

javascript - 将 "strict mode"写入一处,使其对所有 `.js` 文件代码生效

javascript - 检查嵌套的javascript对象数组中是否存在元素

c# - 在浏览器关闭时调用方法

javascript - 我可以使用 fs 中的 createReadStream() 和 Base64 图像而不是路径吗?

node.js - 无法将环境变量传递给 docker

android - 是否可以使用 AWS AppSync 构建离线优先的移动应用程序?

javascript - 渲染后获取div的动态宽度