Fargate에서 Amazon ECS 태스크에 대한 Application Load Balancer 상태 확인 실패 문제를 해결하려면 어떻게 해야 하나요?

5분 분량
0

AWS Fargate에서 Amazon Elastic Container Service(Amazon ECS) 태스크를 실행할 때 발생하는 Application Load Balancer 상태 확인 오류를 해결하고 싶습니다.

간략한 설명

Amazon ECS 태스크가 Application Load Balancer 상태 확인에 실패하면 Amazon ECS 서비스 이벤트 메시지에서 다음 오류 중 하나가 표시될 수 있습니다.

  • 요청 시간이 초과됨
  • 오류 코드 없이 상태 확인에 실패함
  • 404 또는 5xx 오류 코드를 나타내며 상태 확인에 실패함
  • 대상이 로드 밸런서가 꺼진 가용 영역에 있음

실패한 컨테이너 상태 확인에 대해서는 Amazon ECS 태스크의 컨테이너 상태 확인 실패 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

Amazon ECS를 Amazon Elastic Compute Cloud(Amazon EC2) 컨테이너 인스턴스와 함께 사용하는 경우 다음 설명서를 참고하세요.

해결 방법

**참고:**AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 최신 버전의 AWS CLI를 실행 중인지 확인하세요. 다음 AWS CLI 명령에서 예제 값을 원하는 값으로 바꾸세요.

요청 시간 초과 오류

보안 그룹을 검사하여 로드 밸런서가 Fargate 태스크에 상태 확인 요청을 보낼 수 있는지 확인합니다. Fargate 태스크 보안 그룹은 태스크 정의에 지정된 컨테이너 포트에서 인바운드 및 아웃바운드 트래픽을 허용해야 합니다. 소스는 Application Load Balancer 보안 그룹이어야 합니다. Application Load Balancer 보안 그룹은 Fargate 태스크 보안 그룹에 대한 아웃바운드 트래픽을 허용해야 합니다.

참고: Fargate 태스크 및 로드 밸런서에 대해 서로 다른 보안 그룹을 구성하여 이들 간의 트래픽을 허용하는 것이 가장 좋습니다.

보안 그룹이 Fargate 태스크와 Application Load Balancer 간의 통신을 허용하는 경우 상태 확인 설정에서 HealthCheckTimeoutSeconds를 확인하세요. 필요한 경우 시간 초과 초를 약간 늘립니다.

참고: 애플리케이션 태스크가 상태 확인에 응답하는 데 시간이 오래 걸리는 경우에만 HealthCheckTimeoutSeconds를 늘리세요.

평균 응답 시간을 확인하려면 다음 명령을 실행합니다.

$ time curl -Iv http://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>

참고: 작업의 리소스 사용률이 높으면 프로세스가 느려지거나 중단되고 상태 확인이 실패할 수 있습니다.

오류 코드 없이 상태 확인에 실패함

상태 확인 실패 오류 메시지의 예:

(service AWS-service) (port 80) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)

비슷한 오류 메시지가 표시되는 경우 Amazon ECS에서 태스크가 시작된 후 태스크가 빠르게 응답하는지 확인하세요. 또한 애플리케이션이 올바른 응답 코드로 응답하는지 확인하세요.

Amazon ECS에서 태스크가 시작된 후 응답할 시간이 있는지 확인

태스크 시작 후 응답할 시간을 충분히 확보하려면 HealthCheckGracePeriodSeconds를 늘립니다. 이렇게 하면 Amazon ECS가 더 오랜 기간 동안 태스크를 유지하고 비정상인 Elastic Load Balancing 대상 상태 확인을 무시합니다.

참고: 새 서비스를 생성하는 경우 로드 밸런서 구성 페이지에서 상태 확인 유예 기간을 구성할 수 있습니다.

기존 Amazon ECS 서비스의 healthCheckGracePeriodSeconds를 업데이트하려면 다음 명령을 실행합니다.

$ aws ecs update-service --cluster <EXAMPLE-CLUSTER-NAME> --service <EXAMPLE-SERVICE-NAME> --region <EXAMPLE-REGION> --health-check-grace-period-seconds <example-value-in-seconds>

애플리케이션이 올바른 응답 코드로 응답하는지 확인

애플리케이션이 상태 확인 경로에서 보낸 응답 코드를 확인하려면 다음 방법을 사용하세요.

애플리케이션에 액세스 로깅을 구성한 경우 ELB-HealthChecker/2.0을 사용하여 응답을 확인합니다. AWS CloudWatch Logs를 사용하는 경우 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)CloudWatch Logs Insights[를 사용하고 다음 명령을 실행합니다.

fields @timestamp, @message
  | sort @timestamp desc
  | filter @message like /ELB-HealthChecker/

동일한 Amazon Virtual Private Cloud(Amazon VPC)에 있는 Amazon EC2 인스턴스의 경우 다음 명령을 실행하여 태스크가 수동 확인에 응답하는지 확인합니다. 새 Amazon EC2 인스턴스를 시작하려면 자습서: Amazon EC2 Linux 인스턴스 시작을 참고하세요.

HTTP 상태 확인

$ curl -Iv http://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>

HTTPS 상태 확인

$ curl -Iv https://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>

태스크가 빠르게 중지되고 프라이빗 IP 주소를 가져올 수 없는 경우 Amazon ECS 외부에서 독립형 태스크를 시작하여 문제를 해결하세요. 동일한 태스크 정의를 사용하고 해당 IP 주소로 curl 명령을 실행하여 태스크를 시작합니다. 상태 확인 실패로 인해 태스크가 중단되지는 않습니다.

또한 Amazon ECS Exec를 사용하여 컨테이너 수준에서 수신 포트를 확인할 수 있습니다. netstat을 사용하여 애플리케이션이 적절한 포트에서 수신 대기하고 있는지 확인합니다.

$ netstat -tulpn | grep LISTEN

404 또는 5xx 오류 코드를 나타내며 상태 확인에 실패함

404 또는 5xx 오류 코드를 나타내며 상태 확인이 실패하면 상태 확인 요청이 승인되었지만 잘못된 응답 코드를 수신했음을 나타냅니다. 이러한 코드는 또한 애플리케이션이 전송한 응답 코드가 대상 그룹 수준에서 구성된 성공 코드와 일치하지 않음을 나타냅니다(파라미터: Matcher).

404 오류 코드는 상태 확인 경로가 존재하지 않거나 상태 확인 경로 구성에 오타가 있을 때 발생할 수 있습니다.5xx 오류 코드는 태스크 내에 있는 애플리케이션이 요청에 올바르게 응답하지 않거나 처리 오류가 있을 때 발생할 수 있습니다.

애플리케이션이 성공적으로 시작되는지 확인하려면 애플리케이션 로그를 확인하세요.

대상이 로드 밸런서가 꺼진 가용 영역에 있음

로드 밸런서에 대해 가용 영역이 켜져 있으면 탄력적 로드 밸런싱에서 가용 영역에 로드 밸런서 노드를 생성합니다. 가용 영역에 대상을 등록한 상태에서 가용 영역을 켜지 않으면 등록된 대상에 트래픽이 수신되지 않습니다. 자세한 내용은 가용 영역 및 로드 밸런서 노드를 참조하세요.

로드 밸런서가 구성된 가용 영역을 확인하려면 다음 명령을 실행합니다.

aws elbv2 describe-load-balancers --load-balancer-arns <EXAMPLE-ALB-ARN> --query 'LoadBalancers[*].AvailabilityZones[].{Subnet:SubnetId}'

Fargate 태스크가 구성된 가용 영역을 확인하려면 다음 명령을 실행합니다.

aws ecs describe-services --cluster <EXAMPLE-CLUSTER-NAME> --service <EXAMPLE-SERVICE-NAME> --query 'services[*].deployments[].networkConfiguration[].awsvpcConfiguration.{Subnets:subnets}'

참고: update-service AWS CLI 명령을 사용하여 Amazon ECS 서비스의 서브넷 구성을 변경합니다. enable-availability-zones-for-load-balancer AWS CLI 명령을 사용하여 기존 Application Load Balancer에 가용 영역을 추가할 수 있습니다.

관련 정보

서비스 로드 밸런서 문제 해결

대상 그룹에 대한 상태 확인

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠