AWS Fargate 上的 Amazon Elastic Container Service(Amazon ECS)任务出现运行状况检查失败。
解决方法
对最常见的负载均衡器错误进行故障排除
如果收到以下任一错误:
- (service AWS-service) (port 8080) is unhealthy in (target-grouparn:uxyztargetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [502]) or [request timeout]
- (service AWS-Service) (port 8080) is unhealthy in target-group tf-20190411170 due to (reason Health checks failed)
请尝试以下故障排除步骤:
- 如果容器已映射到端口 80,请确认容器安全组允许负载均衡器端口 80 上的入站流量。
- 确认您的负载均衡器运行状况的 ping 端口值配置正确。如果此端口配置不正确,则负载均衡器可能会从自身撤销容器的注册。
- 定义最低运行状况检查宽限期。此设置会指示服务调度器在任务实例化后的预定义时间段内忽略弹性负载均衡运行状况检查。
- 监控该服务的 CPU 和内存指标。例如,CPU 过高可能会使您的应用程序无响应并导致 502 错误。
- 检查您的应用程序日志中是否有应用程序错误。
- 检查 ping 端口和运行状况检查路径是否配置正确。
- 确保您的后端数据库已成功连接。这假设我的应用程序作为 Amazon Elastic Container Service(Amazon ECS)在 Amazon Elastic Compute Cloud(Amazon EC2)实例上启动的一组任务运行。它还假设您的应用程序无法与 Amazon Relational Database Service(Amazon RDS)数据库通信。
对 504 错误进行故障排除
由于以下任何原因,您可能会收到 504 错误:
- 在连接超时到期(10 秒)之前,您的负载均衡器未能与目标建立连接。
- 您的负载均衡器与目标建立了连接,但在空闲超时期结束之前,目标没有响应。
- 您的子网的网络访问控制列表不允许将流量从目标传送到负载均衡器节点的临时端口(1024-65535)
如果收到 504 错误,例如:
- (service AWS-Service) (port 8080) is unhealthy in target-group due to (reason Health checks failed with these codes:[504]
请尝试以下故障排除步骤:
- 确认后端有一个成功响应,没有延迟。
- 正确设置响应超时值。
**注意:**响应超时是一个指定时长,容器必须在此时长内对运行状况检查 ping 返回一个响应。如果此值低于响应所需的时长,则无法通过运行状况检查。
- 查看负载均衡器的访问日志,了解有关错误的更多信息。
对失败的容器运行状况检查进行故障排除
如果收到以下错误,则说明您的服务未与负载均衡器集成,但任务中的容器正在使用您的服务无法通过的运行状况检查:
- (service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks
尝试以下故障排除步骤:
- 确认您传递给容器的命令正确且语法无误。
- 如果任务已经运行了一段时间,请检查您的应用程序日志和 Amazon CloudWatch 日志。
**注意:**您无法访问底层主机,因为 Fargate 由 AWS 管理。要进一步故障排除,请在 Amazon EC2 中启动 Amazon ECS 任务。然后,使用 SSH 连接到您的 EC2 实例。
相关信息
Service definition parameters
Advanced container definition parameters
Enable access logging
Troubleshoot your Application Load Balancers