Amazon Web Services 한국 블로그

AWS Application Load Balancer(ALB) 고급 요청 라우팅 기능 출시

AWS의 부하 분산 서비스인 Application Load Balancer는 2016년 6월에 출시되었습니다! 콘텐츠 기반 라우팅을 지원하는 이 서비스는 서버리스 및 컨테이너 기반 애플리케이션에서 작동하며 유연하게 크기를 조정할 수 있습니다. 많은 AWS 고객이 포트 전송(컨테이너 기반 애플리케이션에 유용함), 상태 확인, 서비스 검색, 리디렉션, 고정 응답기본 인증 등의 다른 ALB 기능을 활용하면서 기존의 호스트 및 경로 기반 라우팅을 사용하여 HTTP 및 HTTPS 애플리케이션을 구동하고 있습니다.

오늘은 고급 요청 라우팅(Advanced Request Routing)의 새로운 기능을 소개합니다.

고급 요청 라우팅

이 호스트 기반 라우팅 기능을 사용하면 Host 헤더를 사용하여 원하는 대상 그룹으로 트래픽을 라우팅하는 규칙을 작성할 수 있습니다. 오늘 이 기능이 확장되고 일반화됨에 따라 이제 표준 및 사용자 지정 HTTP 헤더 및 메서드, 쿼리 문자열과 소스 IP 주소를 기반으로 규칙을 작성하고 트래픽을 라우팅할 수 있습니다. 또한 보다 강력한 규칙 및 조건을 사용할 수 있습니다. 즉, 규칙에 다수의 조건(AND 사용)을 사용하고 각 조건에서 여러 값에 대한 일치 항목(OR 사용)을 지정할 수 있게 됩니다.

이 새로운 기능을 사용하여 애플리케이션 아키텍처를 간소화하고 프록시 플릿 없이 라우팅을 수행하고 불필요한 트래픽을 로드 밸런서에서 차단할 수 있습니다. 다음은 몇 가지 사용 사례입니다.

  • 인간 트래픽과 봇/크롤러 트래픽을 분리합니다.
  • 고객 또는 고객 그룹을 셀(고유한 대상 그룹)에 할당하고 그에 따라 트래픽을 라우팅합니다.
  • A/B 테스트를 구현합니다.
  • 카나리(Canary) 또는 블루/그린 배포를 수행합니다.
  • 메서드에 따라 마이크로서비스 핸들러로 트래픽을 라우팅합니다(PUT의 경우 대상 그룹으로 라우팅하고 GET의 경우 다른 그룹으로 라우팅).
  • IP 주소 또는 CDN을 기준으로 액세스를 제한합니다.
  • 트래픽을 온프레미스 또는 클라우드 내 대상 그룹으로 선택적으로 라우팅합니다.
  • 서로 다른 페이지 또는 사용자 환경을 다양한 유형 및 범주의 디바이스에 제공합니다.

고급 요청 라우팅 사용하기

기존 규칙을 편집하기만 하면 기존 Application Load Balancer에서 이 기능을 사용할 수 있습니다. 고정된 일반 텍스트 응답을 반환하는 단순한 규칙부터 시작하도록 하겠습니다. 이 게시물의 예제는 테스트 및 설명을 위한 것이며 실제로는 더 실용적이고 흥미로운 규칙을 작성하게 될 것입니다.

curl을 사용하여 테스트할 수 있습니다.

$ curl http://TestALB-156468799.elb.amazonaws.com
Default rule reached!

[Insert Rule]을 클릭하여 몇 가지 고급 요청 라우팅을 설정합니다.

그런 다음 [Add condition]을 클릭하고 사용 가능한 옵션을 검사합니다.

[Http header]를 선택한 후 이름이 user이고 값이 jeff인 쿠키를 찾는 조건을 생성합니다. 그런 다음 고정된 응답을 반환하는 작업을 생성합니다.

[Save]를 클릭하고 변경 내용이 적용될 때까지 잠시 기다린 후 한 쌍의 요청을 실행합니다.

$ curl http://TestALB-156468799.elb.amazonaws.com
Default rule reached!

$ curl --cookie "user=jeff" http://TestALB-156468799.elb.amazonaws.com
Hello Jeff

하나 이상의 일치하는 IP 주소 CIDR 블록을 찾는 규칙을 생성할 수도 있습니다.

$ curl http://TestALB-156468799.elb.amazonaws.com
Hello EC2 Instance

쿼리 문자열 기준으로 일치를 수행할 수 있습니다(A/B 테스트에서 매우 유용함).

$ curl http://TestALB-156468799.elb.amazonaws.com?ABTest=A
A/B test, option A selected 

특정 필드 이름의 존재 유무만 확인하면 되는 경우에는 와일드카드를 사용할 수도 있습니다.

일치하는 표준 또는 사용자 지정 HTTP 메서드를 찾을 수 있습니다. 여기서는 READ라는 이름의 메서드를 만들겠습니다.

$ curl --request READ http://TestALB-156468799.elb.amazonaws.com
Custom READ method invoked

작업은 매우 유연하게 생성할 수 있습니다. 새로운 기능은 아니지만 검토하는 것이 좋을 것입니다.

[Forward to]는 요청을 대상 그룹(EC2 인스턴스 세트, Lambda 함수 또는 IP 주소 목록)으로 라우팅합니다.

[Redirect to]는 301 (permanent) 또는 302 (found) 응답을 생성하며 HTTP와 HTTPS를 전환할 때 사용될 수도 있습니다.

[Return fixed response]는 앞서 보여드린 것과 같이 원하는 응답 코드가 포함된 정적 응답을 생성합니다.

[Authenticate]는 Amazon Cognito 또는 OIDC 공급자를 사용하여 요청을 인증합니다(HTTPS 리스너만 해당).

주요 사항
다음은 이 신선하고 강력한 새 기능에 대해 알아두어야 할 몇 가지 다른 사항입니다.

지표Rule EvaluationsHTTP fixed response count CloudWatch 지표를 검토하면 규칙과 관련된 활동에 대한 자세한 내용을 확인할 수 있습니다(자세히 알아보기).

프로그래밍 방식 액세스ALB APICLI(CloudFormation 지원이 곧 제공될 예정임)를 사용하여 규칙을 생성, 수정, 검사 및 삭제할 수도 있습니다.

규칙 일치 – 규칙은 문자열 일치를 통해 작동하므로 규칙이 의도한 대로 기능하는지 테스트하고 두 번 확인하십시오. ALB 액세스 로그의 matched_rule_priorityactions_executed 필드는 테스트 디버깅 시 유용하게 사용될 수 있습니다(자세히 알아보기).

제한 – 각 ALB에는 기본값을 제외한 최대 100개의 규칙이 포함될 수 있습니다. 각 규칙은 최대 5개의 값을 참조하고 최대 5개의 와일드카드를 사용할 수 있습니다. 조건 수는 참조되는 고유한 값의 수로만 제한됩니다.

정식 출시

모든 AWS 리전에서 추가 요금 없이 고급 요청 라우팅을 사용할 수 있습니다(Application Load Balancer에 대한 일반 요금 지불).

Jeff;