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

최종 업데이트 날짜: 2020년 11월 12일

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

간략한 설명

Application Load Balancer 상태 확인을 통과하려면 다음을 확인하십시오.

  • ECS 컨테이너의 애플리케이션이 올바른 응답 코드를 반환합니다.
  • 로드 밸런서 및 컨테이너 인스턴스에 연결된 보안 그룹이 올바르게 구성되어 있습니다.
  • 대상 그룹의 고급 상태 확인 설정이 올바르게 구성되어 있습니다.

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

팁: ECS 작업을 중지한 항목을 찾으려면 중지된 작업에서 오류 확인을 참조하십시오.

해결 방법

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 주소를 가져옵니다.

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

참고: 컨테이너의 IP 주소는 IPADDR에 저장됩니다. BRIDGE 네트워크 모드를 사용하는 경우 IP가 반환됩니다. AWSVPC 또는 HOST 네트워크 모드를 사용하는 경우 태스크가 노출된 태스크 ENI 또는 호스트에 할당된 태스크 IP를 사용합니다.

5.    상태 코드를 가져오려면 IPADDR 및 로컬 리스너의 포트가 포함된 curl 명령을 실행합니다.

상태 확인 경로가 /health인 포트 8080에서 수신 대기하는 컨테이너의 다음 예제를 참조하십시오.

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

명령은 200 OK를 반환해야 합니다.

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

로드 밸런서 및 컨테이너 인스턴스에 연결된 보안 그룹을 올바르게 구성

모범 사례로서, 로드 밸런서에 대한 보안 그룹과 컨테이너 인스턴스에 대한 보안 그룹을 각각 별도로 구성합니다. 이 모범 사례를 따르면 로드 밸런서와 컨테이너 인스턴스 간의 모든 트래픽이 허용됩니다. 또한 컨테이너 인스턴스가 태스크에 지정된 호스트 포트에서 트래픽을 허용하도록 설정합니다.

1.    로드 밸런서에 연결된 보안 그룹이 컨테이너 인스턴스에 연결된 보안 그룹으로 나가는 모든 발신 트래픽을 허용하는지 확인합니다.

2.    컨테이너 인스턴스와 연결된 보안 그룹이 로드 밸런서와 연결된 보안 그룹의 태스크 호스트 포트 범위에 있는 모든 수신 트래픽을 허용하는지 확인합니다.

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

로드 밸런서에 연결된 보안 그룹을 확인하려면 Application Load Balancer의 보안 그룹을 참조하십시오.

대상 그룹의 고급 상태 확인 설정 구성

고급 상태 확인 설정을 올바르게 구성하려면 대상 그룹에 대한 상태 확인을 참조하십시오. 고급 상태 확인 설정을 구성할 때는 다음 단계를 신중하게 따르십시오.

1.    Amazon EC2 콘솔을 열고 [대상 그룹(Target Groups)]을 선택한 후 대상 그룹을 선택합니다.

중요: 새 대상 그룹을 사용합니다. Amazon ECS가 대상 그룹에 컨테이너를 자동으로 등록 및 등록 취소하므로 대상 그룹에 대상을 수동으로 추가하지 마십시오.

2.    [Health checks] 보기를 선택합니다.

3.    [포트(Port)]에서 [트래픽 포트(Traffic Port)]를 선택합니다.

참고: [재정의(Override)]를 선택한 경우 지정된 포트가 태스크 호스트 포트와 일치하는지 확인합니다.

로드 밸런서가 컨테이너 인스턴스와 동일한 가용 영역에 구성되어 있는지 확인합니다.

로드 밸런서가 구성된 가용 영역을 가져오려면 다음을 수행하십시오.

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창의 [로드 밸런싱(LOAD BALANCING)] 섹션에서 [로드 밸런서(Load Balancers)]를 선택합니다.

3.    Amazon ECS 서비스에서 사용 중인 로드 밸런서를 선택합니다.

4.    [설명(Description)] 탭의 [가용 영역(Availability Zones)] 필드에서 나열된 가용 영역을 확인합니다. 

컨테이너 인스턴스가 구성된 가용 영역을 가져오려면 다음을 수행하십시오.

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창의 [Auto Scaling] 섹션에서 [그룹 자동 크기 조정(Auto Scaling Groups)]을 선택합니다. 

3.    클러스터에 연결된 컨테이너 인스턴스 Auto Scaling 그룹을 선택합니다.

4.    [세부 정보(Details)] 탭의 [네트워크(Network)] 섹션에서 나열된 가용 영역이 로드 밸런서에 대해 나열된 가용 영역과 일치하는지 확인합니다.


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


결제 또는 기술 지원이 필요합니까?