Amazon Cloudfront 超时错误

Amazon Cloudfront timeout error

我正在开发一个使用 mongodb 数据集生成器生成数据的节点项目,我已将我的数据生成服务器代码添加到 AWS 的 Lambda,我已将其公开给 AWS 的 api 网关.

所以现在的问题是 CloudFront timeout the request 在 30 秒后。问题是我正在做的计算不能分成多个 API 命中。因此,社区中的任何人都可以在这里帮助我,或者可以告诉我一些替代方案,让我可以点击不会超时的请求。

我相信我最初误解了您遇到的问题的性质。

So now the issue is that CloudFront timeout the request after 30 seconds

我假设,既然你提到了 CloudFront,你已经 明确地 在你的 API 网关端点前配置了 CloudFront。

您确实没有,因为 API 网关 隐含地 使用来自 "the AWS Edge Network" 的服务(a.k.a。CloudFront)提供部分服务。

我的假设是 API Gateway 的 "hidden" CloudFront 分布与标准 CloudFront 分布具有不同的行为,但显然在任何相关程度上都不是这种情况,在这里。

其实API Gateway also has a 30 second response timeoutCan Be Increased?就是No。因此 "CloudFront" 超时基本上与 API 网关强加的超时相同。

当然,这将优先于您的 Lambda 函数的任何更长的超时。

没有简单明了的解决方法。这似乎是一项超出 API 网关设计范围的任务。

一个选项——当API强加于我时我个人倾向于不喜欢它——是要求分页。我真的很讨厌……只要给我数据,我就能处理它……但它有实际应用。如果请求是针对 1000000 行,return 行 1 到 1000 和 return 将获取行 1001 到 2000 的 next_url

另一个选项是初始函数将请求提交给第二个 lambda 函数,使用异步调用进行处理,return 重定向将用户发送到新的 URL在哪里可以获取数据。现在,听我说,因为这个解决方案听起来很糟糕,但它在理论上是可行的。异步函数将在后台完成工作,并将响应存储在 S3 中。获取数据的 URL 将是第三个 lambda 函数,该函数将轮询要存储数据的 S3 存储桶中的密钥,比如每秒一次,持续 20 秒。如果该文件出现,它将为该位置预签名 URL,并使用签名的 URL 作为 Location 向浏览器发出最终重定向。如果文件没有出现,它会再次将浏览器重定向回自身,这样轮询就会继续,直到文件出现或浏览器厌倦了重定向循环。

粗略?是的。可行吗?大概。好主意?这是有争议的......但似乎你正在做的事情确实超出了 API 网关的基本设计参数,所以要么需要一个相当复杂的解决方法,要么你会想在其他地方实现它使用 API 网关。

当然,您可以编写自己的 "API Gateway" 在 EC2 上运行并通过 Lamdba API 和 returns 结果直接调用 Lambda 函数给调用者——所以 Lambda仍然处理工作和缩放,但您避免了 30 秒超时。 30 秒是等待网络响应的很长时间。

我看到这是一个老问题,但需要说明的是,从 2017 年 3 月开始,可以更改源响应超时和保持活动超时。

https://aws.amazon.com/about-aws/whats-new/2017/03/announcing-configure-read-timeout-and-keep-alive-timeout-values-for-your-amazon-cloudfront-custom-origins/

Origin 响应超时的最大值为 60 秒,但如果需要,AWS 可以将值增加到 180 秒(需要支持请求)