正如标题所说。我有一个带有 HTTP POST 请求的 API。当我使用本地运行的 API(使用
sam local start-api
)运行 POST 请求时,它工作得很好。但是,当我将其部署到 API Gateway 并在其中运行时,即使我将最大超时设置为 300 秒,我也会在 30 秒后收到超时错误。我的 SAM 文件如下:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
python3.8
Sample SAM Template for manipulation-api
Globals:
Function:
Timeout: 300
Resources:
rManipulationAPI:
Type: AWS::Serverless::Api
Properties:
Cors:
AllowMethods: "'GET, POST'"
AllowOrigin: "'*'"
Name: manipulation-api
StageName: dev
rManipulationFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: Manipulate
MemorySize: 10000
PackageType: Image
ImageUri: <My Docker Repo>
Events:
Paraphrase:
Type: Api
Properties:
Path: /manipulate
Method: POST
RestApiId: !Ref rManipulationAPI
Metadata:
Dockerfile: Dockerfile
DockerContext: ./src/manipulate
DockerTag: python3.8-v1
rHealthCheckFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: HealthCheck
PackageType: Image
ImageUri: <My Docker Repo>
Events:
HealthCheck:
Type: Api
Properties:
Path: /health
Method: GET
RestApiId: !Ref rManipulationAPI
Metadata:
Dockerfile: Dockerfile
DockerContext: ./src/health_check
DockerTag: python3.8-v1
Outputs:
ManipulationApi:
Value: !Sub "https://${rManipulationAPI}.execute-api.${AWS::Region}.amazonaws.com/dev/manipulate"
这是 API Gateway 服务的限制,无论您的 Lambda 超时设置为多少,API Gateway 都会在 30 秒后超时。
如果您预计 Lambda 执行时间始终接近或超过 30 秒,则需要转向更多的异步模式。
一些常见的模式:
/submitRequest
);另一个用于提交带有请求 ID 的请求。另一个允许客户获取请求的状态并确定请求是否已完成并获得最终结果(即/getResult
)。无论如何,API Gateway 无法支持 30 秒以上的响应。 一般来说,设计具有如此长时间等待的 API 并不是一个好的做法,因为连接可能会发生很多事情。最好为客户端提供异步解决方案,这样更不容易出错。
Amazon API Gateway 集成超时限制增加至超过 29 秒
发布于:2024 年 6 月 4 日
Amazon API Gateway 现在使客户能够提高集成度 超时超出先前的 29 秒限制。该设置代表 API Gateway 等待响应的最长时间 整合完成。您可以将集成超时提高到 区域 REST API 和私有 REST API 超过 29 秒, 但这可能需要减少您的帐户级别的限制 配额限制。通过此次发布,工作负载需要的客户 更长的超时,例如使用大语言的生成式 AI 用例 模型(法学硕士),可以利用 API 网关。