APIGateway正在审查/修改Alb

问题描述 投票:0回答:1
如何在API网关V2库上使用httpalbintegration httpapi? 当前,我的应用程序确实确实构建和部署。但是,当我询问时,响应是“健康的联系”。实际上,我定义了一个JSON响应,其中{“状态”:“ OK”}应返回。 there是Fargate任务上托管的FastAPI应用程序的方法:

requests.get(endpoint/ping)

在CDK中,我定义了我的集成AS

# Health check route @router.get("/ping", status_code=status.HTTP_200_OK) async def ping(): logging.info(f"ping request received.") # SageMaker will ping this to check if the endpoint is healthy return JSONResponse({"status": "ok"})

我的理论是

需要VPC链接,并且侦听器对象不足。
需要一些参数,以确保API网关不会修改响应

其他解释

httpapi

httpalBintegration

  1. 我可以在此处获得澄清和原因/解决方案,并适当使用httpalbintegration?
  2. 什么是在工作
  3. 您的fastapi应用程序正确返回
// Create the HTTP ALB Integration const albIntegration = new apigwv2_integrations.HttpAlbIntegration(`AlbIntegration-${props.stageName}`, listener, ); // Create the HTTP API with the integration this.httpApi = new apigwv2.HttpApi(this, `HttpApi-${props.stageName}`, { defaultIntegration: albIntegration, });

您的Alb正在设置并转发到您的Fargate服务。

您的CDK部署成功了,请求对API网关端点的请求贯穿服务。

aws-api-gateway aws-cdk aws-application-load-balancer aws-http-api
1个回答
0
投票
❗️

什么是不起作用的 API网关返回一个类似

{"status": "ok"}
    而不是实际的fastapi json响应的字符串。
  • 🔍根本原因
    🔄
    HTTPALB健康检查默认行为

  • 当您使用

    默认路由

    时,API网关期望ALB的响应将为HTTP符合http code-,包括
  • Statuscode
  • headers

  • body
.
。 wodeveve,当与API网关一起使用时,application Load Balancers

以可能与APIGateway的期望不符的方式返回响应。 特别是,如果您的FastApi应用程序返回JSON,但是您的ALB目标组健康检查点是/ping

端,Alb可能会以
    ITSOWN thect或对响应的畸形代理进行响应。
  • solution

💡1.

SET

"Healthy Connection"

在httpalbintegration

API网关根据集成类型使用不同的有效载荷格式。默认情况下,它可能使用版本

HttpAlbIntegration

,更严格。
处理RAW HTTP风格的响应(因为您的FastApi应用自然会返回),您想使用付款格式1.0,就像这样: /ping 该版本假设您正在使用CDKv2。

🔧2。确保ALB健康检查不会干扰

检查您的ALB目标组的Health检查路径。如果碰到payloadFormatVersion: '1.0',请确保不会超越响应(某些框架可能会以不同的方式对待健康检查)。考虑将ALB健康检查路径与您的公共路线分开,例如使用:

2.0

然后将ALB健康检查配置为使用const albIntegration = new apigwv2_integrations.HttpAlbIntegration(`AlbIntegration-${props.stageName}`, listener, { parameterMapping: undefined, payloadFormatVersion: apigwv2.PayloadFormatVersion.VERSION_1_0, });

而不是
/ping 3. 3. confirm fastapi响应适当 您已经返回了jsonresponse,这很好。但是确认标题和状态代码的设置正确:


/ping

这确保了明确的状态和反应主体。

✅最佳练习清单

@router.get("/healthcheck") async def healthcheck(): return "OK"

✅设置

/healthcheck


✅避免将ALB健康检查路由到面向用户的端点

✅确认您的ALB目标组健康(在控制台中检查)

✅确保Fargate Service的安全组允许从Alb
的入站流量

✅ Use FastAPI with explicit status codes and content

🧪本地测试
如果您直接击中
alb URL(绕过API网关),您会看到正确的JSON吗?如果是,那么问题可能是API网关如何解释ALB的响应的问题 - 这进一步支持设置
/ping

from fastapi.responses import JSONResponse
from fastapi import status

@router.get("/ping", status_code=status.HTTP_200_OK)
async def ping():
    return JSONResponse(status_code=status.HTTP_200_OK, content={"status": "ok"}) 


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.