Amazon web services Amazon API网关超时

Amazon web services Amazon API网关超时,amazon-web-services,aws-api-gateway,Amazon Web Services,Aws Api Gateway,我对API网关有一些问题。我制作了一些API方法,有时它们的工作时间超过10秒,Amazon返回504错误。以下是截图: 请帮忙!如何增加超时 谢谢 您不能增加超时时间,至少现在不能。终结点必须在10秒或更短时间内完成。您需要努力提高端点的速度 虽然不能增加超时时间,但如果工作可能被拆分,则可以将lambda链接在一起 使用aws sdk: var aws = require('aws-sdk'); var lambda = new aws.Lambda({ region: 'us-wes

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

请帮忙!如何增加超时


谢谢

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


虽然不能增加超时时间,但如果工作可能被拆分,则可以将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)
  }
});
资料来源:
AWS文档:

目前,Lambda调用或HTTP集成的默认限制为30s,并且该限制不可配置

Lambda函数将在最长5分钟后超时;API网关请求将在29秒后超时。你不能改变这一点,但你可以用异步执行模式来解决它,我在博客中写道:


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


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

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

或者,正如上面一些答案中所建议的,您可以将后端更改为发送状态代码202(已接受),这意味着请求已成功接收,然后后端继续进一步处理。当然,在实施解决方案之前,我们需要考虑用例和需求。

< P>我想对“JoaRayMuraes”帖子发表评论,但没有足够的声誉。唯一需要补充的是,使用异步不需要重构,它只取决于您的后端以及如何将其拆分+客户端重试

如果您没有看到高比例的504,并且您还没有准备好进行异步处理,那么您可以在它们上实现客户端,这样它们就不会永远失败

AWS SDK会自动执行带回退的重试,因此有助于使其更容易,特别是因为它允许您为自己的功能维护SDK,而无需不断更新部署包

一旦你这样做了,它将导致对这些超时的可见性降低,因为它们不再是永久性的故障。这可以为您赢得一些时间来处理核心问题,即您首先看到的是504。这当然意味着重构代码以获得更多响应,将大型功能拆分为更多“微服务”类型的概念,并减少外部网络调用

重试的另一个好处是,如果您重试应用程序中的所有5xx响应,它可能会覆盖许多在正常执行期间可能会看到的不同问题。一般认为,在所有应用程序中,这些问题从来都不是100%可以避免的,因此最好的做法是继续进行,并做最坏的打算


尽管如此,您仍然应该致力于减少lambda执行时间或实现异步。这将允许您将超时值设置为更小的数字,这将使您更快地失败。这有助于减少对前端的影响,因为它不必等待29秒来重试失败的请求。

截至2021年5月21日,这仍然是相同的。最长时间的硬限制为30秒。以下是API网关配额的官方文件。

考虑到lambda的限制和启动所需的时间(很容易超过此超时),我有点惊讶这是不可配置的。@CasualT:我知道这有点旧,但您是否尝试过增加lambda函数配置的内存量?Lambda函数根据您为内存选择的值缩放其CPU。我知道这是违反直觉的,但它是有效的。尝试将容量增加到至少1024MB,看看这是否对启动延迟没有帮助。冷启动行为应限于最初的几个响应。即使您每分钟调用一次函数,甚至每5分钟调用一次函数,函数也应该保持温暖。现在是30秒,而不是10秒——在您提供的页面上显示30秒。我对AWS对这一限制的音盲反应感到惊讶。有多少人将他们的数据库移动到云端,并首次进入AWS堆栈,编写一个VPC lambda API,却在开发阶段遇到了这一细微的限制?回到绘图板上,因为AWS拒绝允许更长的请求。如果你问我的话,这很荒谬。仅供参考,该值可能设置为低于29秒,而不是更高,不幸的是,只是为了确认,29秒到目前为止仍然是最大值。@Abhishek Upadhyaya这方面的文档在哪里?根据最大集成超时是30秒。@totsubo,您可以在共享的链接(文档)中搜索“集成超时”-“50毫秒-29秒,适用于所有集成类型,包括Lambda、Lambda代理、HTTP、HTTP代理和AWS集成。”。它的标题是“配置和运行RESTAPI的API网关配额”。@Abhishek Upadhyaya甚至HTTP配额也表示30秒。您解决了这个问题吗?API网关和Lambda是为短运行时间而设计的。这是AWS的预期限制。如果您的运行时间很长,例如运行scraper并且必须向客户端发送响应,那么请将ECS或EKS(Kubernetes)与ALB一起使用。@Donato我们可以使用AWS SDK而不是API吗?这个答案只是来自其他答案的信息的混合。请避免重复已经说过的话。你能详细说明一下这是怎么回事吗?如何向API用户返回值?当调用后端处理请求需要>29秒才能启动时,您提倡的方法将不起作用,因为API网关将在29秒超时并返回504。这不是2吗