Amazon EC2 시작 유형을 통해 Amazon ECS 태스크를 실행하여 Amazon ECS에서 Application Load Balancer 상태 확인을 통과하도록 하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 3월 17일

Amazon Elastic Container Service(Amazon ECS)의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대한 Application Load Balancer 상태 확인이 비정상 상태를 반환합니다. EC2 인스턴스가 상태 확인을 통과하기를 원합니다.

간략한 설명

Amazon ECS 태스크가 로드 밸런서 상태 확인에 실패하면 Amazon ECS 서비스 이벤트 메시지에서 다음 오류 중 하나가 수신됩니다.

  • (다음 코드로 인해 이유 상태 확인 실패: [502 또는 504]) 또는 (요청 시간 초과)로 인해 (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)에서 (서비스 AWS-service) (포트 8080)이 비정상임((service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [502 or 504]) or (request timeout))
  • (이유 상태 확인 실패)로 인해 target-group tf-20190411170에서 (서비스 AWS-Service) (포트 8080)이 비정상임((service AWS-Service) (port 8080) is unhealthy in target-group tf-20190411170 due to (reason Health checks failed))
  • (이유 상태 확인 실패)로 인해 (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)에서 (서비스 AWS-Service) (인스턴스 i-1234567890abcdefg) (포트 443)이 비정상임((service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed))

Amazon ECS 태스크 콘솔에서 다음 오류가 발생할 수도 있습니다.

태스크에서 (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)의 ELB 상태 확인에 실패함(Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789))

컨테이너 상태 확인에 실패한 오류(서비스 AWS-Service)(태스크 c13b4cb40f1f4fe4a2971f76ae5a47ad)가 발생한 경우 Amazon ECS 태스크의 컨테이너 상태 확인 실패 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.

참고: Amazon ECS 태스크는 여러 가지 이유로 비정상 상태를 반환할 수 있습니다. 다음 조치를 취해도 문제가 해결되지 않으면 서비스 로드 밸런서 문제 해결을 참조하세요.

팁: ECS 태스크가 중지된 이유를 찾으려면 오류로 중지된 태스크 확인을 참조하세요.

해결 방법

Amazon ECS 태스크에서 로드 밸런서 상태 확인 문제를 해결하고 Application Load Balancer 상태 확인을 전달하려면 다음을 확인합니다.

  • 로드 밸런서와 Amazon ECS 태스크 간의 연결
  • 대상 그룹의 상태 확인 설정
  • ECS 컨테이너에 있는 애플리케이션의 상태 및 구성
  • 컨테이너 인스턴스의 상태

로드 밸런서와 Amazon ECS 태스크 간의 연결 확인

로드 밸런서가 Amazon ECS 태스크에 대한 상태 확인을 수행할 수 있도록 하려면 다음 사항을 확인하세요.

로드 밸런서와 컨테이너 인스턴스에 연결된 보안 그룹 또는 awsvpc 네트워크 모드에 대한 ECS 태스크 탄력적 네트워크 인터페이스가 올바르게 구성된 경우

로드 밸런서와 컨테이너 인스턴스 또는 태스크 탄력적 네트워크 인터페이스에 대해 서로 다른 보안 그룹을 구성하는 것이 가장 좋습니다. 이 접근 방식을 사용하면 로드 밸런서와 컨테이너 인스턴스 또는 태스크 탄력적 네트워크 인터페이스 간의 모든 트래픽을 허용할 수 있습니다. 또한 컨테이너 인스턴스가 태스크에 지정된 포트에서 트래픽을 허용하도록 설정할 수 있습니다.

  • 로드 밸런서와 연결된 보안 그룹이 등록된 포트의 컨테이너 인스턴스 또는 태스크 탄력적 네트워크 인터페이스로의 발신 트래픽을 허용하는지 확인합니다. 해당되는 경우 컨테이너 인스턴스와 연결된 상태 확인 포트에도 동일하게 적용되는지 확인합니다.
  • 컨테이너 인스턴스 또는 태스크 탄력적 네트워크 인터페이스와 연결된 보안 그룹이 로드 밸런서와 연결된 보안 그룹의 태스크 호스트 포트 범위에 있는 모든 수신 트래픽을 허용하는지 확인합니다. 로드 밸런서에 연결된 보안 그룹을 확인하려면 Application Load Balancer의 보안 그룹을 참조하세요.

중요: 동적 포트 매핑을 사용할 때 서비스는 호스트 포트가 아닌 동적 포트(일반적으로 포트 32768~65535)에 노출됩니다. 이러한 경우 컨테이너 인스턴스 보안 그룹이 로드 밸런서에 대한 수신 규칙의 휘발성 포트 범위를 소스로 반영하는지 확인합니다.

로드 밸런서가 컨테이너 인스턴스와 동일한 가용 영역 또는 awsvpc 네트워크 모드의 ECS 태스크 탄력적 네트워크 인터페이스에 구성되어 있는 경우

로드 밸런서에 가용 영역을 활성화하면 Elastic Load Balancing이 가용 영역에 로드 밸런서 노드를 생성합니다. 가용 영역에 대상을 등록하지만 가용 영역을 활성화하지 않으면 등록된 대상이 트래픽을 수신하지 않습니다. 자세한 내용은 가용 영역 및 로드 밸런서 노드를 참조하세요.

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

  1. Amazon EC2 콘솔을 엽니다.
  2. 탐색 창의 로드 밸런싱(Load Balancing)에서 [로드 밸런서(Load Balancers)]를 선택합니다.
  3. Amazon ECS 서비스에서 사용 중인 로드 밸런서를 선택합니다.
  4. 설명(Description) 탭의 가용 영역(Availability Zones) 필드 아래에서 가용 영역을 확인할 수 있습니다.

참고: Application Load Balancer의 경우 언제든지 가용 영역을 활성화하거나 비활성화할 수 있습니다. Network Load Balancer의 경우 가용 영역을 활성화한 후에는 비활성화할 수 없지만 추가 가용 영역을 활성화할 수는 있습니다.

Application Load Balancer를 사용하는 경우 교차 영역 로드 밸런싱이 항상 켜져 있습니다. Network Load Balancer를 사용하는 경우 교차 영역 로드 밸런싱이 기본적으로 꺼져 있습니다. Network Load Balancer를 생성한 후 언제든지 교차 영역 로드 밸런싱을 켜거나 끌 수 있습니다. 자세한 내용은 Elastic Load Balancing 작동 방법을 참조하세요.

컨테이너 인스턴스가 구성된 가용 영역을 확인하려면 다음을 수행합니다.

  1. Amazon EC2 콘솔을 엽니다.
  2. 탐색 창의 [Auto Scaling]에서 [Auto Scaling 그룹]을 선택합니다.
  3. 클러스터에 연결된 컨테이너 인스턴스 Auto Scaling 그룹을 선택합니다.
  4. 세부 정보(Details) 탭의 네트워크(Network)에서 나열된 가용 영역이 로드 밸런서에 대해 나열된 가용 영역과 일치하는지 확인합니다.

클러스터의 가용 영역을 수정하려면 AWS CloudFormation 콘솔을 열고 클러스터에 대한 CloudFormation 스택을 선택한 다음 서브넷 구성을 업데이트합니다.

awsvpc에 대한 태스크 탄력적 네트워크 인터페이스가 구성된 가용 영역을 확인하려면 다음을 수행합니다.

  1. Amazon ECS 콘솔을 엽니다.
  2. 탐색 창에서 클러스터(Clusters)를 선택한 다음, 서비스가 포함된 클러스터를 선택합니다.
  3. 클러스터 페이지의 서비스(Services) 탭에 있는 서비스 이름(Service Name) 열에서 확인할 서비스를 선택합니다.
  4. 세부 정보(Details)를 선택한 다음 허용된 서브넷(Allowed subnets)을 선택하여 서비스에 대해 사용하도록 설정된 서브넷을 확인합니다.
  5. Amazon VPC 콘솔에서 서브넷을 확인할 수 있습니다.
  6. 서브넷의 가용 영역이 로드 밸런서에 나열된 가용 영역과 일치하는지 확인합니다.

참고: Amazon ECS 콘솔에서는 Amazon ECS 서비스의 서브넷 구성을 변경할 수 없습니다. AWS Command Line Interface(AWS CLI) update-service 명령을 사용하면 됩니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

로드 밸런서의 서브넷 및 ECS 컨테이너 인스턴스 또는 awsvpc 네트워크 모드에 대한 ECS 태스크 탄력적 네트워크 인터페이스와 연결된 네트워크 액세스 제어 목록(ACL)이 올바르게 구성된 경우

로드 밸런서와 컨테이너 인스턴스 또는 태스크 탄력적 네트워크 인터페이스의 서브넷이 다를 수 있습니다. 이러한 서브넷 간에 트래픽이 허용되는지 확인하려면 다음을 확인합니다.

  • 로드 밸런서의 서브넷과 연결된 네트워크 ACL이 휘발성 포트(1024~65535) 및 리스너 포트에서 수신 트래픽을 허용하는지 확인하세요. 네트워크 ACL이 상태 확인 및 휘발성 포트에서 발신 트래픽도 허용하는지 확인합니다.
  • 컨테이너 인스턴스의 서브넷 또는 awsvpc 모드의 태스크 탄력적 네트워크 인터페이스와 연결된 네트워크 ACL이 상태 확인 포트에서 수신 트래픽을 허용하는지 확인합니다. 네트워크 ACL이 휘발성 포트에서 발신 트래픽을 허용하는지 확인합니다.

네트워크 ACL에 대한 자세한 내용은 네트워크 ACL 작업을 참조하세요.

대상 그룹의 상태 확인 설정 확인

대상 그룹의 상태 확인 설정이 올바르게 구성되었는지 확인하려면 다음을 수행합니다.

  1. Amazon EC2 콘솔을 엽니다.
  2. 탐색 창의 [로드 밸런싱(Load Balancing)]에서 [대상 그룹(Target Groups)]을 선택합니다.
  3. 대상 그룹을 선택합니다.
    중요: 새 대상 그룹을 사용합니다. Amazon ECS가 대상 그룹에 컨테이너를 자동으로 등록 및 등록 취소하므로 대상 그룹에 대상을 수동으로 추가하지 마세요.
  4. 상태 확인(Health checks) 탭에서 다음을 수행합니다.
    포트(Port)경로(Path) 필드가 올바르게 구성되었는지 확인합니다. 포트 필드가 올바르게 구성되지 않은 경우 로드 밸런서가 컨테이너 등록을 취소할 수 있습니다.
    포트의 경우 트래픽 포트를 선택했는지 확인합니다.
    참고: [재정의(Override)]를 선택한 경우 지정된 포트가 태스크 호스트 포트와 일치하는지 확인합니다.
    제한 시간(Timeout)의 경우 응답 제한 시간 값이 올바르게 설정되어 있는지 확인합니다.
    참고: 응답 제한 시간은 컨테이너가 상태 확인 ping에 대한 응답을 반환해야 하는 시간입니다. 이 값이 응답에 필요한 시간보다 적으면 상태 확인이 실패합니다.

ECS 컨테이너에서 애플리케이션의 상태 및 구성 확인

ECS 컨테이너의 애플리케이션이 로드 밸런서 상태 확인에 응답하는지 확인

ECS 컨테이너의 애플리케이션이 로드 밸런서 상태 확인에 올바르게 응답하는지 확인하려면 다음을 수행합니다.

  • 대상 그룹의 ping 포트와 상태 확인 경로가 올바르게 구성되었는지 확인합니다.
  • ECS 서비스에 대한 CPU 및 메모리 사용률 지표를 모니터링합니다. 예를 들어 CPU가 높으면 애플리케이션이 응답하지 않고 502 오류 또는 시간 초과가 발생할 수 있습니다.
  • 최소 상태 확인 유예 기간을 정의합니다. 이렇게 설정하면 태스크가 인스턴스화된 후 사전 정의된 기간 동안 Elastic Load Balancing 상태 확인을 무시하도록 서비스 스케줄러에 지시합니다. Amazon ECS 태스크는 Network Load Balancer를 등록하는 데 더 긴 상태 확인 유예 기간이 필요할 수 있습니다.
  • 애플리케이션 로그에서 애플리케이션 오류를 확인합니다. 자세한 내용은 CloudWatch Logs에서 awslogs 컨테이너 로그 보기를 참조하세요.

ECS 컨테이너의 애플리케이션이 올바른 응답 코드를 반환하는지 확인

로드 밸런서가 HTTP GET 요청을 상태 확인 경로로 전송할 때 ECS 컨테이너의 애플리케이션은 기본 200 OK 응답 코드를 반환해야 합니다.

참고: Application Load Balancer를 사용하는 경우 Matcher 설정을 200 이외의 응답 코드로 업데이트할 수 있습니다. 자세한 내용은 대상 그룹에 대한 상태 확인을 참조하십시오.

1.    SSH를 사용하여 컨테이너 인스턴스에 연결합니다.

2.    (선택 사항) 시스템에 적합한 명령을 사용하여 curl을 설치합니다.

Amazon Linux 및 기타 RPM 기반 배포 환경에서는 다음 명령을 실행합니다.

sudo yum –y install curl

Debian 기반 시스템(예: Ubuntu)에서는 다음 명령을 실행합니다.

sudo apt-get install curl

3.    다음 명령을 실행하여 컨테이너 ID를 가져옵니다.

docker ps

참고: 로컬 리스너에 대한 포트는 시퀀스 끝에 있는 PORTS 아래의 명령 출력에 표시됩니다.

4.    docker inspect 명령을 실행하여 컨테이너의 IP 주소를 가져옵니다.

112233445566을 컨테이너의 ID 번호로 교체해야 합니다.

$ IPADDR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' 112233445566)

참고: 컨테이너의 IP 주소는 IPADDR에 저장됩니다. BRIDGE 네트워크 모드를 사용하는 경우에만 이 명령을 사용합니다.

AWSVPC 네트워크 모드를 사용하는 경우 태스크 탄력적 네트워크 인터페이스에 할당된 태스크 IP 주소를 사용합니다. HOST 네트워크 모드를 사용하는 경우 태스크가 노출되는 호스트의 IP 주소를 사용합니다.

5.    IPADDR 및 로컬 리스너의 포트가 포함된 curl 명령을 실행하여 상태 코드를 가져옵니다. 예를 들어 상태 확인 경로가 /health인 포트 8080에서 수신 중인 컨테이너에서 curl 명령을 실행하는 경우 명령은 응답 코드 200 OK를 반환해야 합니다.

curl -I http://${IPADDR}:8080/health

HTTP가 아닌 오류 메시지를 수신하면 애플리케이션이 HTTP 트래픽을 수신하지 않는 것입니다. Matcher 설정에 지정한 것과 다른 HTTP 상태 코드를 수신하면 애플리케이션이 HTTP 트래픽을 수신 중이지만 정상 상태의 대상에 대한 상태 코드를 반환하지 않는 것입니다.

컨테이너 인스턴스의 상태 확인

AWS ECS 서비스 이벤트에서 다음과 같은 이벤트 메시지가 표시된다고 가정해 봅니다.

(이유 상태 확인 실패)로 인해 (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)에서 (서비스 AWS-Service) (인스턴스 i-1234567890abcdefg) (포트 443)이 비정상임((service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed))

Amazon EC2 콘솔에서 상태 확인을 확인하여 컨테이너 인스턴스의 상태를 확인합니다. 인스턴스가 시스템 상태 확인에 실패할 경우 인스턴스를 중지하고 시작해 봅니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?