✨ Target Group
- 대상 그룹은 ECS Fargate Container 이므로 대상 유형을 IP 주소로 설정한다.
- ECS Fargate는 서버리스 컨테이너이다. AWS가 컨테이너 실행에 필요한 인프라를 관리한다.
- Fargate Task는 자체적인 IP 주소를 가지고 있으며, 해당 IP 주소를 통해 트래픽을 전달 받는다.
- 타겟 그룹은 로드 밸런서의 리스너 규칙에 연결되어 있으며, 각 리스너 규칙은 특정 포트에서 수신한 요청을 특정 타겟 그룹으로 전달하도록 구성된다. 따라서 로드 밸런서는 리스너 규칙을 기반으로 어떤 타겟 그룹으로 트래픽을 보낼지 결정한다.
- 한 개의 타겟 그룹에는 여러 개의 ECS 컨테이너가 등록될 수 있고, 로드 밸런서는 수신한 요청을 이 타겟 그룹에 등록된 대상 중 하나로 라우팅한다.
- 추후 로드 밸런서는 443 포트에서 트래픽을 수신하도록 리스너 규칙을 생성할 것이며, 타겟 그룹에 속한 ECS 컨테이너는 8080 포트에서 동작하도록 설정할 것이다.
타겟 그룹의 포트를 선택하는 부분에서 많은 고민이 들었다. 대부분 기본적으로 80 포트로 설정을 하는 것 같던데 의미하는 바가 무엇인지 궁금했다. 로드 밸런서에서 타겟 그룹으로 상태 검사를 수행할 때 80 포트에서 이루어진다는 의견도 보았다. 추후 재정의가 가능하지만, 실제 서비스는 8080 포트에서 동작하고 있으므로 맞춰줘야 될 필요가 있다.
로드 밸런서는 타겟 그룹에 대해 주기적으로 상태 검사를 수행하는데 정상적으로 응답하는지 여부를 확인하고, 사용 가능한 타겟을 선택하여 트래픽을 분산한다. 여기서 상태 검사 경로를 지정해주는데 해당 경로에 대한 API를 설계하지 않았을 경우 404 Not Found 응답이 발생해서 Unhelthy 상태로 나온다. 이는 추후 다루겠지만 성공 코드를 404로 설정해주면 일차적인 해결은 된다.
✨ ALB
1. Network
ALB를 퍼블릭 서브넷에 배치하면 해당 서브넷의 라우팅 테이블에 인터넷 게이트웨이가 설정되어 있으므로 ALB가 외부의 인터넷과 통신할 수 있는 환경이 마련된다.
2. Security Group
로드 밸런서에 리스너를 추가하거나 대상 그룹의 상태 확인 포트를 업데이트할 때마다, 해당 포트에 대한 양방향 트래픽을 허용하기 위해 로드 밸런서와 연결된 보안 그룹을 업데이트해야 한다.
- 로드 밸런서 리스너 포트에서 모든 인바운드 트래픽을 허용한다.
- 인스턴스 리스너 포트의 인스턴스로 아웃바운드 트래픽을 허용한다.
- 상태 확인 포트의 인스턴스로 아웃바운드 트래픽을 허용한다.
3. Listener
- 리스너를 통해 ALB는 클라이언트 요청을 받아들이고, 정의된 규칙에 따라 요청을 적절한 대상 그룹으로 라우팅하여 로드 밸런싱 작업을 수행한다.
- 리스너 프로토콜이 HTTPS인 경우에는 리스너에 한 개 이상의 SSL 서버 인증서를 반드시 배포해야 한다. 해당 내용은 다음에 자세하게 다루도록 하겠다.