AWS ECS中Spring微服务Pet任务映射错误目标组问题咨询
看起来你遇到了ECS部署Spring微服务后,Pet服务访问404的问题,我帮你梳理下排查和解决的思路:
问题梳理
先明确下已知的关键信息:
- 两个微服务(Pets、Owners)都是从同一MySQL取数的Spring应用,部署在ECS的两个独立任务,主机端口分别映射32768和32769
- Owners服务通过ELB访问
http://{elb-dns}/owner正常,但Pets服务访问http://{elb-dns}/pet返回404 - 已经确认Pet任务被关联到了错误的Target Group(TG)
- 从你提供的CLI输出看,ECS集群
vets状态正常,有2个活跃服务;Target Groupvets0-tg已经关联到了vets-elb
排查与解决步骤
1. 确认ECS服务和Target Group的绑定关系
首先得明确Pet对应的ECS服务是不是真的绑错了TG,执行这条命令查看Pet服务的详情:
aws ecs describe-services --cluster vets --services <你的Pet服务名称> --region us-west-2
重点看输出里的loadBalancers字段,检查targetGroupArn是不是和你预期的Pet服务TG一致(毕竟Owners用了vets0-tg,Pet应该有自己独立的TG才对)。
2. 检查ELB的监听器规则
如果两个服务要通过同一个ELB的不同路径(/pet和/owner)转发,ELB必须配置对应的路径规则,把不同请求转发到各自的TG:
- 先确认是否存在Pet服务对应的专属TG(你目前只列出了
vets0-tg,可能漏掉了Pet的TG) - 执行以下命令查看ELB的监听器和规则:
# 先获取监听器ARN aws elbv2 describe-listeners --load-balancer-arn arn:aws:elasticloadbalancing:us-west-2:224265390743:loadbalancer/app/vets-elb/5643eac9e4d51da0 --region us-west-2 # 用上面得到的监听器ARN查看规则 aws elbv2 describe-rules --listener-arn <上一步得到的listener-arn> --region us-west-2
检查是否有规则把/pet*开头的请求转发到Pet的TG,/owner*转发到vets0-tg。如果没有这个规则,就得补上。
3. 验证Pet任务的端口映射与健康检查
就算绑对了TG,还要确认两个关键点:
- Pet任务的端口映射是否正确:执行命令查看Pet任务的详情,检查
containers[].networkBindings里的主机端口(32768)和容器端口是否匹配你的Spring应用端口:
aws ecs describe-tasks --cluster vets --tasks <你的Pet任务ID> --region us-west-2
- 健康检查是否匹配:当前
vets0-tg的健康检查路径是/,如果Pet服务的健康检查端点不是/(比如是/pet/health),那TG会认为Pet任务不健康,不会转发流量。这种情况需要修改对应TG的HealthCheckPath。
4. 修复ECS服务与TG的绑定
如果确认是ECS服务绑错了TG,用这条命令更新服务的负载均衡配置:
aws ecs update-service --cluster vets --service <你的Pet服务名称> --load-balancers targetGroupArn=<正确的Pet服务TG的ARN>,containerName=<Pet容器名称>,containerPort=<Pet容器内部端口> --region us-west-2
更新后,ECS会重新部署Pet任务,把它注册到正确的TG里。
5. 最终验证
完成上面的步骤后,做两个验证:
- 查看Pet对应的TG的目标状态,确认Pet任务是
healthy:
aws elbv2 describe-target-health --target-group-arn <正确的Pet服务TG的ARN> --region us-west-2
- 再次访问
http://{elb-dns}/pet,确认是否返回预期数据。
总结
核心问题大概率是ECS服务和Target Group的绑定错误,或者ELB缺少/pet路径的转发规则,按照上面的步骤逐一排查,应该就能解决问题。
内容的提问来源于stack exchange,提问作者acs254
相关产品推荐
相关产品推荐

