URL, Host, 헤더, 메서드 같은 “HTTP 내용”을 보고
어떤 Target으로 보낼지 세밀하게 골라주는 L7 HTTP 전용 로드 밸런서
클라이언트 ←→ ALB(공개 IP/도메인) ←→ Target Group(EC2, ECS, Lambda, IP 등)
WebSocket, HTTP/2 지원
BUT HTTP/2 위에서 WebSocket를 돌리는게 아님
ALB에서 HTTP/2는 클라이언트 ↔ ALB 구간에서만 지원
[브라우저] -- HTTP/2 --> [ALB] -- HTTP/1.1 --> [EC2/ECS 등]
ALB는 평범한 HTTP 요청에 대해선 HTTP/2를 지원하고, 별도로 WebSocket 연결도 지원
리다이렉트(클라이언트에게 다른 URL로 가라고 응답) 지원
ALB Listener Rule의 Action(동작) 중 하나
동작 방식:
예시)

경로 라우팅 지원
URL의 “경로(Path)”를 보고 어떤 Target Group으로 보낼지 결정하는 기능


호스트 이름에 기반한 라우팅도 가능


ALB는 마이크로서비스와 컨테이너 기반 애플리케이션에 가장 좋은 로드밸런서 ‼️
포트 매핑 기능이 있어서 EC2 인스턴스의 동적 포트로의 리다이렉션을 가능하게 함
ALB는 여러 대상 그룹으로 라우팅 할 수 있으며
Health Check(상태 확인)은 대상 그룹 레벨에서 이루어짐
ALB 생성

HTTP, HTTPS가 허용된 SG를 적용한 인스턴스 2개를 생성해준다



얼마나 되는 가용 영역에 로드밸런서를 배포할지 정해야 함
Security groups를 설정할 차례인데 HTTP 트래픽만 허용하는 SG 그룹 생성




다음 버튼을 클릭하면

Include as pending below 클릭

다시 ALB 생성 화면으로 넘어오면

80 포트에 있는 로드 밸런스의 리스너와 연결

생성하고 ALB가 active된 상태가 되면 DNS name이 부여되는데

새로고침시마다 ALB에서 리다이렉션 해주는 인스턴스가 다름을 확인할 수 있다
EC2 인스턴스에 로드밸런서를 통해서만 액세스하게 하는 법

EC2 인스턴스에 연결된 SG로 가서 Edit Inbound rules 클릭

ELB의 SG 접근만 허용하도록 선택
적용 후 EC2 Public Address로 접근하려고 하면 타임아웃 발생

하지만 로드밸런서의 DNS Name 주소로 접근하면

정상작동
애플리케이션 밸런서 규칙

모든 요청이 demo-tg-alb로 보내지게 되어있음
Add Rule 버튼을 클릭해서 더 복잡하게 설정 가능
Conditions => 무엇을 요청의 필터로 사용할 것인지 선택
우선 난 Path로 선택하고 /error일 때 요청이 보내지도록 Rule 추가
그 다음으로는 조건이 맞는다면 어떤 액션을 취할지 정의해야 함
난 여기서 Return fixed response => 404 => Not Found, custom error!를 지정하겠다
규칙이 여러개일 수 있기 때문에 우선순위를 정해줘야 함! 1이 가장 높은 우선순위!!
규칙을 적용하고 나서 다시 DNS name값을 복사하고 끝에 "/error"를 붙여주면

