Amazon API网关超时

时间:2015-08-12 19:03:01

标签: amazon-web-services aws-api-gateway

我对API网关有一些问题。我制作了一些API方法,有时它们工作时间超过10秒,亚马逊返回504错误。以下是截图:

enter image description here

请帮忙!如何增加超时?

谢谢!

6 个答案:

答案 0 :(得分:15)

根据http://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html,Lambda调用或HTTP集成的默认限制为 30s ,此限制不可配置。

答案 1 :(得分:12)

你不能增加超时,至少现在不行。您的终点必须在10秒或更短时间内完成。您需要努力提高端点的速度。

http://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html

答案 2 :(得分:8)

截至2017年12月,最大值仍为29秒,但应该能够自定义超时值。

https://aws.amazon.com/about-aws/whats-new/2017/11/customize-integration-timeouts-in-amazon-api-gateway/

这可以在APIGateway中每种方法的“集成请求”中设置。

答案 3 :(得分:2)

虽然您无法增加超时,但如果工作可以拆分,您可以将lambda链接在一起。

使用aws sdk:

var aws = require('aws-sdk');
var lambda = new aws.Lambda({
  region: 'us-west-2' //change to your region
});

lambda.invoke({
  FunctionName: 'name_of_your_lambda_function',
  Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
  if (error) {
    context.done('error', error);
  }
  if(data.Payload){
   context.succeed(data.Payload)
  }
});

来源:Can an AWS Lambda function call another AWS文档:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

答案 4 :(得分:1)

可以减少超时,但不能增加超过29秒。方法的后端应在29秒之前返回响应,否则API网关将引发504超时错误。

或者,如以上某些答案中所建议,您可以更改后端以发送状态代码202(已接受),表示已成功接收到请求,然后后端继续进行进一步处理。当然,在实施解决方法之前,我们需要考虑用例及其要求

答案 5 :(得分:0)

我想评论“ joarleymoraes”帖子,但没有足够的声誉。唯一要添加的是您不必重构以使用异步,它仅取决于您的后端以及如何拆分它+客户端重试。

如果您没有看到很高的504,并且还没有准备好进行异步处理,则可以在它们上实现客户端retries with exponential backoff,这样就不会造成永久性故障。

AWS开发工具包会自动执行带有退避的重试,因此可以帮助简化操作,特别是因为Lambda Layers将允许您维护功能的SDK,而不必不断更新部署包。

一旦执行此操作,将导致这些超时的可见性降低,因为它们不再是永久性故障。这可以为您腾出一些时间来解决核心问题,即您首先看到的是504。这肯定意味着将代码重构为具有更高的响应能力,将大型功能拆分为更多的“微服务”类型概念,并减少外部网络调用。

重试的另一个好处是,如果您重试应用程序中的所有5xx响应,则它可以涵盖很多不同的问题,您可能会在正常执行过程中看到这些问题。通常在所有应用程序中都认为这些问题永远不会100%避免,因此最好的做法是进行计划并为最坏的情况做计划!

所有这些,您仍然应该减少lambda执行时间或进行异步处理。这将使您可以将超时值设置为较小的数字,从而使失败更快。由于不必等待29秒重试失败的请求,因此有助于减少对前端的影响。