【发布时间】: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