Application Load Balancer에서 경로 기반 라우팅을 수행하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 5월 4일

Application Load Balancer를 통해 연결된 여러 개의 마이크로서비스를 실행 중입니다. URL 경로에 기반하여 특정 대상 그룹으로 요청을 전달하고 싶습니다.

간략한 설명

Application Load Balancer를 사용하면 URL에 기반하여 대상 그룹으로 요청을 전달하는 규칙이 있는 리스너를 생성할 수 있습니다. Classic Load Balancer, Network Load Balancer 및 Gateway Load Balancer 등 다른 로드 밸런서 유형에는 이 기능을 사용할 수 없습니다. 경로 패턴 규칙은 URL의 경로에만 적용되며 URL의 쿼리 파라미터에는 적용되지 않습니다. 경로 패턴에 대한 자세한 내용은 경로 조건을 참조하세요.

Application Load Balancer에 경로 기반 라우팅을 설정하려면 다음을 수행합니다.

  1. 대상 그룹을 생성합니다.
  2. 리스너 규칙을 구성합니다.

대상 그룹을 생성하기 전에 다음 사전 요구 사항을 충족해야 합니다.

해결 방법

서비스 A서비스 B라는 두 가지 서비스가 있고 애플리케이션이 포트 80의 이러한 서비스에서 실행되고 있다고 가정합니다. 예를 들어 서비스 A는 /svcA 경로에서 애플리케이션을 실행하고, 서비스 B는 /svcB 경로에서 애플리케이션을 실행합니다.

대상 그룹 생성

인스턴스를 생성한 후 이러한 인스턴스를 대상 그룹에 등록합니다. 요청은 로드 밸런서에 구성된 리스너 규칙에 따라 대상 그룹의 지정한 포트 및 프로토콜을 사용하여 등록된 대상으로 전달됩니다. 그러나 대상을 개별적으로 등록할 때 포트 정보를 재정의할 수 있습니다. 자세한 내용은 대상 그룹 생성을 참조하세요.

예를 들어 프로토콜HTTP로, 포트80으로 사용하여 각각 애플리케이션이 배포된 두 개의 대상 그룹을 생성한다고 가정합니다. 예를 들어 서비스 A를 실행 중인 EC2 인스턴스를 target-group-A에 등록합니다. 이 대상 그룹의 경우 HealthCheckProtocolHTTP로 설정하고 HealthCheckPath/svcA로 설정할 수 있습니다.

서비스 B를 실행 중인 EC2 인스턴스를 target-group-B에 등록합니다. 이 대상 그룹의 경우 상태 HealthCheckProtocolHTTP로 설정하고 HealthCheckPath/svcB로 설정할 수 있습니다.

언제든지 대상 그룹에 목표를 추가하거나 제거할 수 있습니다. 자세한 내용은 대상 그룹에 대상 등록을 참조하세요.

리스너에 대한 규칙에서 대상 그룹을 지정한 후, 로드 밸런서는 로드 밸런서에 대해 활성화된 가용 영역에 있는 대상 그룹에 등록된 모든 대상의 상태를 지속적으로 모니터링합니다. 로드 밸런서는 정상적인 등록 대상으로 요청을 라우팅합니다. 자세한 내용은 대상 그룹에 대한 상태 확인을 참조하세요.

리스너 규칙 구성

Application Load Balancer에 대한 리스너 생성 시 기본 규칙 외에 하나 이상의 규칙을 정의할 수 있습니다. 규칙은 우선 순위, 작업 및 하나 이상의 조건으로 구성됩니다. 기본 규칙에 대한 조건은 정의할 수 없습니다. 기본이 아닌 규칙에 대한 조건이 하나도 충족되지 않으면 기본 규칙에 대한 작업이 수행됩니다.

규칙 우선 순위에 대한 자세한 내용은 규칙 재정렬을 참조하세요.

규칙 작업에 대한 자세한 내용은 규칙 작업 유형을 참조하세요.

규칙 조건에 대한 자세한 내용은 규칙 조건 유형을 참조하세요.

Application Load Balancer에서 경로 기반 라우팅을 구현하려면 리스너 규칙을 구성해야 합니다. 요청을 라우팅하려는 경로 패턴에 따라 각 경로 패턴별로 하나의 규칙을 구성해야 합니다.

예시:

리스너 규칙 1: 요청 URL 경로에 /svcA 문자열이 포함되어 있으면 요청을 target-group-A로 전달합니다. target-group-A에는 지정된 경로에서 애플리케이션을 실행하는 서비스 A가 포함되어 있기 때문입니다.

리스너 규칙 2: 요청 URL 경로에 /svcB 문자열이 포함되어 있으면 해당 요청을 target-group-B로 전달합니다. target-Group-B에는 지정된 경로에서 애플리케이션을 실행하는 서비스 B가 포함되어 있기 때문입니다.

새 HTTP 리스너를 생성하려면 HTTP 리스너 생성을 참조하세요.

새 HTTPS 리스너를 생성하려면 HTTPS 리스너 생성을 참조하세요.

조건 및 작업으로 리스너 규칙을 업데이트하려면 다음을 수행합니다.

  1. Amazon EC2 콘솔(Amazon EC2 console)을 엽니다.
  2. 탐색 창의 로드 밸런싱(Load Balancing)에서 로드 밸런서(Load Balancers)를 선택합니다.
  3. 로드 밸런서를 선택한 다음 리스너(Listeners)를 선택합니다.
  4. 리스너를 업데이트하려면 규칙 보기/편집(View/edit rules)을 선택합니다.
  5. 메뉴 모음에서 규칙 추가(Add rules) 아이콘(더하기 기호)를 선택합니다. 이렇게 하면 우선 순위에 따라 규칙을 삽입할 수 있는 위치에 규칙 삽입(Insert Rule) 아이콘이 추가됩니다.
  6. 이전 단계에서 추가한 규칙 삽입(Insert Rule) 아이콘 중 하나를 선택합니다.
  7. /svcA에 대한 경로 기반 규칙을 추가하려면 조건 추가(Add condition), 경로(Path)를 선택한 다음 경로 패턴 /svcA를 입력합니다. 조건을 저장하려면 확인 표시 아이콘을 선택합니다.
  8. 전달 작업을 추가하려면 작업 추가(Add action), 전달(Forward to)을 선택한 다음 대상 그룹 target-group-A를 선택합니다.
  9. 저장(Save)을 선택합니다.

다음 변경 사항을 적용하여 /svcB 경로에 대해 이전 단계를 반복합니다.

  • 6단계에서 경로 패턴 /svcB를 입력합니다.
  • 7단계에서 대상 그룹 target-group-B를 선택합니다.

자세한 내용은 Application Load Balancer를 위한 리스너 규칙을 참조하세요.

참고: 경로 기반 라우팅 규칙은 정확히 일치하는 항목을 찾습니다. 이 예시에서 경로 기반 라우팅은 경로 정의 /svcA 및 /svcB를 사용합니다. 애플리케이션에서 이러한 경로(예: /svcA/doc 또는 /svcB/doc)를 더 아래로 라우팅해야 하는 요청이 있는 경우 경로 기반 라우팅 규칙에 대한 조건을 작성할 때 와일드카드를 포함합니다. /svcA* 또는 /svcB*와 유사한 경로 패턴을 사용하여 요청을 라우팅할 때 이러한 경로에 있는 모든 문서를 고려해야 합니다.

경로 기반 라우팅 테스트

이 라우팅을 테스트하려면 웹 브라우저에서 Application Load Balancer의 DNS 이름을 복사하고 URL 경로 /svcA 또는 /svcB를 추가합니다. Application Load Balancer 리스너가 요청을 수신하면 리스너는 경로 조건에 따라 해당 요청을 적절한 대상 그룹에 전달합니다.

예를 들어 Application Load Balancer의 DNS 이름이 alb-demo-1234567890.us-west-2.elb.amazonaws.com이라고 가정해 보겠습니다.

  • http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcA는 서비스 A를 반환해야 합니다.
  • http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcB는 서비스 B를 반환해야 합니다.

Application Load Balancer는 경로 기반 라우팅을 통해 리스너 규칙 및 대상 그룹을 사용하여 단일 로드 밸런서 뒤에서 여러 마이크로서비스를 호스팅할 수 있습니다. 따라서 애플리케이션에서 클라이언트의 요청을 라우팅하기 위한 복잡한 규칙을 설정할 수 있습니다. 경로 기반 규칙 외에도 호스트 헤더, user-agent 헤더 및 쿼리 파라미터 값을 기반으로 특정 애플리케이션에 요청을 라우팅할 수도 있습니다. 자세한 내용은 Advanced request routing for AWS Application Load Balancers를 참조하세요.