Amazon ECS의 서비스 로드 밸런서 문제 해결
Amazon ECS의 서비스 로드 밸런서 문제 해결
Amazon ECS 서비스는 태스크를 Elastic Load Balancing 로드 밸런서에 등록할 수 있어요. 로드 밸런서 구성 오류는 중지된 태스크의 일반적인 원인이에요. 중지된 태스크가 로드 밸런서를 사용하는 서비스에 의해 시작된 것이라면 다음 가능한 원인을 고려하세요.
출처: 문서
본문
Amazon ECS 서비스 연결 역할이 존재하지 않음 (Amazon ECS service-linked role doesn't exist)
Amazon ECS 서비스 연결 역할은 Amazon ECS 서비스가 컨테이너 인스턴스를 Elastic Load Balancing 로드 밸런서에 등록할 수 있게 해 줘요. 서비스 연결 역할은 계정에 생성되어 있어야 해요. 자세한 내용은 Using service-linked roles for Amazon ECS를 참고하세요.
컨테이너 인스턴스 보안 그룹 (Container instance security group)
컨테이너가 컨테이너 인스턴스의 포트 80에 매핑되어 있다면, 로드 밸런서 상태 검사가 통과하려면 컨테이너 인스턴스 보안 그룹이 포트 80의 인바운드 트래픽을 허용해야 해요.
모든 가용 영역에 대해 구성되지 않은 Elastic Load Balancing 로드 밸런서
로드 밸런서는 리전의 모든 가용 영역, 또는 최소한 컨테이너 인스턴스가 있는 모든 가용 영역을 사용하도록 구성되어야 해요. 서비스가 로드 밸런서를 사용하고 로드 밸런서가 사용하도록 구성되지 않은 가용 영역에 있는 컨테이너 인스턴스에서 태스크를 시작하면, 태스크는 상태 검사를 통과하지 못해요. 이로 인해 태스크가 종료돼요.
Elastic Load Balancing 로드 밸런서 상태 검사 오구성
로드 밸런서 상태 검사 파라미터는 지나치게 제한적이거나 존재하지 않는 리소스를 가리킬 수 있어요. 컨테이너 인스턴스가 비정상으로 판단되면 로드 밸런서에서 제거돼요. 서비스 로드 밸런서에 대해 다음 파라미터가 올바르게 구성되었는지 확인하세요.
- Ping Port – 로드 밸런서 상태 검사의 Ping Port 값은 로드 밸런서가 정상인지 확인하기 위해 검사하는 컨테이너 인스턴스의 포트예요. 이 포트가 잘못 구성되면 로드 밸런서가 컨테이너 인스턴스를 자체적으로 등록 해제할 가능성이 있어요. 이 포트는 상태 검사에 사용하는 서비스의 태스크 정의에서 컨테이너의
hostPort값을 사용하도록 구성해야 해요. - Ping Path – 이는 로드 밸런서 상태 검사의 일부예요. 애플리케이션이 정상일 때 성공 상태 코드(예: 200)를 반환할 수 있는 애플리케이션의 엔드포인트예요. 이 값은 자주
index.html로 설정되지만, 서비스가 그 요청에 응답하지 않으면 상태 검사가 실패해요. 컨테이너에index.html파일이 없다면 컨테이너 인스턴스의 기본 URL을 대상으로 하도록 이 값을/로 설정할 수 있어요. - Response Timeout – 컨테이너가 상태 검사 ping에 응답을 반환해야 하는 시간이에요. 이 값이 응답에 필요한 시간보다 낮으면 상태 검사가 실패해요.
- Health Check Interval – 상태 검사 ping 사이의 시간이에요. 상태 검사 간격이 짧을수록 컨테이너 인스턴스가 Unhealthy Threshold에 더 빨리 도달할 수 있어요.
- Unhealthy Threshold – 컨테이너 인스턴스가 비정상으로 간주되기 전에 상태 검사가 실패할 수 있는 횟수예요. unhealthy threshold가 2이고 health check interval이 30초라면, 태스크는 비정상으로 간주되기 전에 상태 검사 ping에 응답할 60초의 시간을 가져요. 태스크에 더 많은 응답 시간을 주려면 unhealthy threshold나 health check interval을 높일 수 있어요.
서비스를 업데이트할 수 없음 (Unable to update the service)
servicename: Load balancer container name or port changed in task definition – 서비스가 로드 밸런서를 사용한다면 AWS CLI 또는 SDK로 로드 밸런서 구성을 수정할 수 있어요. 구성 수정 방법은 Amazon Elastic Container Service API Reference의 UpdateService를 참고하세요. 서비스의 태스크 정의를 업데이트하면 로드 밸런서 구성에 지정된 컨테이너 이름과 컨테이너 포트가 태스크 정의에 계속 남아 있어야 해요.
동시에 실행할 수 있는 태스크 수 한도 도달
새 계정의 경우 할당량이 서비스 할당량보다 낮을 수 있어요. 계정의 서비스 할당량은 Service Quotas 콘솔에서 볼 수 있어요. 할당량 증가를 요청하려면 Service Quotas User Guide의 Requesting a quota increase를 참고하세요.