Amazon API网关超时

Иго*_*рей 28 amazon-web-services aws-api-gateway

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

在此输入图像描述

请帮忙!如何增加超时?

谢谢!

Cap*_*paj 29

到 2022 年,我们终于找到了解决方法。不幸的是,AWS 没有更改 API 网关,因此仍然是 29 秒,但是,您可以在 lambda 本身中使用内置 HTTPS 端点:Built-in HTTPS Endpoints for Single-Function Microservices 已确认没有超时 - 所以本质上您可以有完整的 15 分钟 lambda 超时窗口:https://twitter.com/alex_casalboni/status/1511973229740666883

例如,以下是使用 aws-cdk 和 typescript 定义带有 http 端点的函数的方法:

 const backendApi = new lambda.Function(this, 'backend-api', {
      memorySize: 512,
      timeout: cdk.Duration.seconds(40),
      runtime: lambda.Runtime.NODEJS_16_X,
      architecture: Architecture.ARM_64,
      handler: 'lambda.handler',
      code: lambda.Code.fromAsset(path.join(__dirname, '../dist')),
      environment: {
        ...parsedDotenv
      }
    })

    backendApi.addFunctionUrl({
      authType: lambda.FunctionUrlAuthType.NONE,
      cors: {
        // Allow this to be called from websites on https://example.com.
        // Can also be ['*'] to allow all domain.
        allowedOrigins: ['*']
      }
    })
Run Code Online (Sandbox Code Playgroud)


Ran*_*Ran 17

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

  • 这不应该是29吗? (4认同)
  • 答案是从 2016 年开始的,此后发生了很多事情。当时还没有.. (3认同)

E.J*_*nan 11

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

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

  • 现在是30秒,而不是10秒 - 在您提供的页面上显示30. (7认同)
  • 考虑到lambda的限制和旋转所需的时间(可能很容易超过这个超时),我有点惊讶,这是不可配置的. (5认同)
  • @CasualT:我知道这有点老了,但你是否尝试过增加Lambda函数配置的内存量?Lambda函数根据您为内存选择的值来扩展CPU.我知道反直觉,但它有效.尝试碰到至少1024MB并查看它是否对您的启动延迟没有帮助. (5认同)
  • 我对来自AWS的此限制的聋哑响应感到惊讶。有多少人将他们的数据库迁移到云中,并首次涉足AWS堆栈,编写VPC-lambda API只是为了在开发阶段顺利进入这种打印限制?回到绘图板上,因为AWS拒绝允许更长的请求。如果你问我,那太荒谬了。 (3认同)

joa*_*aes 10

Lambda 函数将在达到最大值后超时。5 分钟;API 网关请求将在 29 秒后超时。你不能改变它,但你可以用异步执行模式解决它,我写了我的博客文章:

https://joarleymoraes.com/serverless-long-running-http-requests/


myo*_*uji 8

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

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

这可以在APIGateway中每种方法的"集成请求"中设置.

  • 仅供参考,不幸的是,该值可能低于29秒,而不是更高 (11认同)
  • 需要确认的是,29s 仍然是目前的最大值。 (2认同)

小智 5

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

如果您没有看到高百分比的 504 并且您还没有准备好进行异步处理,您可以实现客户端重试并对其进行指数退避,这样它们就不会出现永久性故障。

AWS 开发工具包自动使用回退实现重试,因此它可以帮助简化重试,尤其是因为Lambda 层将允许您为您的函数维护开发工具包,而无需不断更新您的部署包。

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

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

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