如何配置API Gateway(REST API)到私有NLB/ALB至Fargate?遇部署断路器触发错误
ECS Fargate部署问题+私有负载链路配置解决方案
一、ECS部署断路器触发的排查修复
断路器触发核心是任务启动失败或健康检查不通过,结合你的私有子网环境,重点查这些:
- 子网路由:私有子网必须配置NAT网关(Fargate任务需要拉取镜像、访问AWS服务),检查路由表是否指向NAT网关,NAT网关要放在公有子网(没有的话先创建)。
- 健康检查配置:Fargate任务健康检查要对应.NET API的存活接口,比如设为
HTTP:8080/health,确保容器内API确实监听8080端口,且安全组允许ALB访问容器8080端口。 - 镜像拉取权限:ECS任务执行角色要有
AmazonEC2ContainerRegistryReadOnly权限,ECR镜像仓库权限要开放给该角色,保证私有子网内任务能拉取到镜像。 - 安全组规则:
- NLB安全组:允许API Gateway的VPC端点(私有集成场景)或公网(公网API Gateway场景)访问80端口;同时允许ALB所在子网访问NLB的80端口。
- ALB安全组:允许NLB访问80端口;允许Fargate任务所在子网访问8080端口。
- Fargate任务安全组:允许ALB访问8080端口。
二、私有负载链路+ALB路径路由配置
1. API Gateway对接私有NLB
- 创建REST API,使用私有集成关联NLB,选择你的VPC和NLB实例,指定80端口。
- 必须给API Gateway配置VPC端点(放在你的私有子网内),否则API Gateway无法访问私有NLB。
2. 私有NLB配置
- 目标组类型选
IP,添加两个可用区里ALB的私有IP,端口设为80。 - NLB监听80端口,流量转发到该目标组。
3. 私有ALB路径路由
- 按业务路径创建多个目标组,每个目标组指向Fargate任务的8080端口(选
IP类型,开启ECS服务自动注册任务IP)。 - ALB监听80端口,添加路由规则:
- 路径
/api/v1/users/*→ 转发到用户服务目标组 - 路径
/api/v1/orders/*→ 转发到订单服务目标组 - 默认路径
/*→ 转发到默认API目标组
- 路径
4. ECS Fargate服务配置
- 任务定义里容器端口映射设为
8080:8080(对应.NET API监听的容器内端口)。 - 服务配置选择两个私有子网,关联ALB的目标组,开启自动注册。
- 任务执行角色和任务角色权限要齐全,能访问ECR、CloudWatch等必要服务。
三、.NET Minimal API适配示例
确保API监听正确端口,带健康检查端点:
var builder = WebApplication.CreateBuilder(args); // 配置Kestrel监听容器内8080端口 builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(8080); }); var app = builder.Build(); // 健康检查端点,对应Fargate健康检查配置 app.MapGet("/health", () => Results.Ok("Healthy")); // 业务接口示例 app.MapGet("/api/v1/users/{id}", (int id) => Results.Ok(new { UserId = id, UserName = "Demo User" }) ); app.Run();
内容的提问来源于stack exchange,提问作者Wallucio
相关产品推荐
相关产品推荐

