如何在 AWS 中使用 API 网关支持 SSE,同时在 FastAPI 应用程序中维护外部身份验证层?

问题描述 投票:0回答:2

我有一个 FastAPI 应用程序,它使用服务器发送事件 (SSE) 来流式传输生成 AI 模型的响应,类似于 OpenAI 的 API。该应用程序使用以下架构部署:

  • Gunicorn 与 uvicorn worker 托管的 FastAPI 应用程序
  • 运行 dockerized FastAPI 应用程序的 EKS
  • ALB 由安装在 EKS 上的入口控制器控制
  • API 网关,为 EKS 上托管的所有服务添加身份验证层

当我在本地使用 SSE 端点运行 FastAPI 应用程序时,一切正常。但是,当使用上述堆栈部署应用程序时,SSE 响应不会流回,而是在流一次完成所有块时返回。

经过调查,我发现问题发生在我添加API网关层时,我需要进行身份验证。响应不再流式传输,并且在通过 API 网关时添加内容长度标头。这使得 API 网关看起来像是在等待响应完全完成,然后再添加标头并将其发送回客户端。

我遇到的另一个问题是,由于 API 网关,请求在 30 秒后超时,而 SSE 响应可能需要更长的时间。

我正在寻找一种解决方案来支持 SSE,同时将身份验证层保留在应用程序代码之外。任何关于如何实现这一目标的建议或指导将不胜感激!

amazon-web-services aws-api-gateway amazon-eks server-sent-events openai-api
2个回答
0
投票

这就是 API 网关的工作方式,句号,没有流式响应,响应超时为 30 秒。你已经得出结论了。错误伴随着你的期望而来:

我需要身份验证

你不需要APIGW来进行认证,你可以直接在你的应用程序中验证用户身份并授权他们。使用 APIGW 进行身份验证实际上是在滥用它的功能,因为它并非用于该目的,这就是您遇到各种问题的原因。对于APIGW的成本,加进去也没有意义

我们应该调查为什么您认为您不能将身份验证添加到您的应用程序中。是什么阻止你这样做?


0
投票

根据您的图表,您可以尝试使用 Cognito 对用户进行身份验证。在这种情况下,您不需要 API GATEWAY,它不是为流媒体设计的。

© www.soinside.com 2019 - 2024. All rights reserved.