AWS ECS部署Spring Boot应用失败:目标组注销问题求助
问题分析与解决方案:AWS ECS Spring Boot服务因目标组健康检查超时被注销
核心问题定位
从日志可明确根因:service plm-service port 8091 is unhealthy in target-group plm-TG due to (reason Request timed out)——目标组对8091端口的健康检查请求超时,触发ECS自动注销实例并停止任务。
1. 核对Spring Boot健康检查端点配置
- Spring Boot默认健康检查端点为
/actuator/health(需引入spring-boot-starter-actuator依赖),确认目标组健康检查路径匹配:- 进入AWS控制台EC2 > 目标组 > plm-TG,检查健康检查设置的
路径是否为/actuator/health(避免误用Flask常用的/health) - 确保项目依赖中包含Actuator,且配置文件未禁用健康端点:
management.endpoints.web.exposure.include=health management.endpoint.health.show-details=always # 可选,用于调试
- 进入AWS控制台EC2 > 目标组 > plm-TG,检查健康检查设置的
2. 验证容器内端口监听状态
- 通过ECS Exec进入容器,或登录容器实例,执行命令检查8091端口是否被监听:
netstat -tulpn | grep 8091 # 或使用ss命令 ss -tulpn | grep 8091 - 确认Spring Boot启动日志中存在
Tomcat started on port(s): 8091 (http)类输出,且application.properties已配置server.port=8091(避免默认绑定8080端口)
3. 检查安全组与网络ACL规则
- 容器实例/任务安全组:允许目标组健康检查IP范围的8091端口入站流量(VPC控制台可查看健康检查IP段)
- 网络ACL:确认VPC及子网的网络ACL无拦截8091端口入站/出站流量的规则,确保全量允许相关流量
4. 调整健康检查超时与阈值
- Spring Boot应用启动(含RDS连接初始化)耗时可能超过默认健康检查超时,可修改目标组配置:
- 将
超时调整为10-30秒,间隔设为30秒 - 把
不健康阈值改为3次,健康阈值改为2次,给应用足够的启动响应缓冲时间
- 将
5. 排查RDS连接对启动的影响
- 临时替换RDS为本地H2数据库,测试应用是否能通过健康检查,排除数据库连接慢导致的启动阻塞
- 检查Spring Boot数据库连接配置,确保
spring.datasource.hikari.connection-timeout等参数设置合理,避免启动阶段卡在连接建立步骤
6. 确认ECS任务端口映射配置
- 检查ECS任务定义的容器端口映射:确保容器内8091端口已正确映射(AWSVPC模式下直接暴露8091端口,桥接模式下需映射到主机端口),且目标组配置的
端口与任务定义一致
内容的提问来源于stack exchange,提问作者Faateh Shoaib
相关产品推荐
相关产品推荐

