我有一个使用 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/