【问题标题】:AWS API Gateway immediate timeout when using child_process in Lambda在 Lambda 中使用 child_process 时 AWS API Gateway 立即超时
【发布时间】:2019-01-20 12:08:52
【问题描述】:

我有一个使用 API 网关调用的 Lambda 函数。当 Lambda 在 child_process 对象上命中 spawn 调用时,API Gateway 立即失败并出现 504 超时错误。我在 API 网关上的超时设置是最长 30 秒,而 Lambda 设置为一分钟。运行 lambda 最多只需要 1400 毫秒,但它仍然会在 API 中报告超时。 API Gateway 得到 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);
}

任何想法将不胜感激。谢谢!

【问题讨论】:

  • 也许exec.spawnSync 中有一个错误,并且错误的类型没有正确传播?将 exec.spawnSync 包装在 try-catch 中并找出答案。
  • 尝试添加 try/catch,但 Lambda 执行正常。没有发现任何错误。 FFMPEG 调用导致成功执行。
  • API Gateway 日志中有什么内容?
  • 日志中看起来有用的内容并不多,而且它们太长,无法在 cmets 中发布。主要是设置对 API 的调用的序言,然后这个 23:26:01 Sending request to https://> 23:26:01 由于超时错误执行失败 23:26:01 方法完成状态:504

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2017-04-06
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多