Application Load Balancer
현대적인 애플리케이션 제공을 목표로 하는 고급 요청 라우팅으로 HTTP 및 HTTPS 트래픽의 부하를 분산합니다.
요청 수준(계층 7)에서 작동하는 Application Load Balancer는 요청의 콘텐츠에 따라 EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수 등의 대상으로 트래픽을 라우팅합니다. HTTP 및 HTTPS 트래픽의 고급 로드 밸런싱에 적합한 Application Load Balancer는 마이크로서비스와 컨테이너 기반 애플리케이션을 비롯한 현대적 애플리케이션 아키텍처 전달을 위한 고급 요청 라우팅 기능을 제공합니다. Application Load Balancer는 항상 최신 SSL/TLS 암호 및 프로포콜이 사용되도록 하여 애플리케이션의 보안을 간소화하고 개선합니다.
기능
상호 TLS 지원
상호 TLS는 x509 인증서 기반 ID를 사용하는 클라이언트와 서버 간의 양방향 인증을 위한 프로토콜입니다. 이 기능을 통해 ALB는 클라이언트 인증서를 인증하고 타사 인증 기관(CA) 또는 사설 인증 기관(ACM PCA)에서 발급한 인증서에 대해 해지 검사를 수행합니다. 또한 로드 밸런서는 클라이언트 인증서 정보를 대상으로 프록시하며, 이 정보는 애플리케이션의 권한 결정에 사용될 수 있습니다.
자동 대상 가중치
자동 대상 가중치(ATW)는 애플리케이션의 대상이 손상된 경우에도 애플리케이션의 가용성을 향상시키는 새로운 가중치 랜덤 로드 밸런싱 알고리즘을 사용합니다. 이 알고리즘은 HTTP 상태 코드와 TCP/TLS 오류율을 분석하여 동일한 대상 그룹의 동료보다 오류율이 높은 대상을 식별합니다. ATW가 성과가 저조한 대상을 식별할 때 이 기능은 성과에 따라 각 대상으로 전달되는 트래픽 양을 조정하여 문제가 발생한 대상이 성공적으로 복구되도록 도와줍니다.
계층 7 로드 밸런싱
요청 속성(예: X-Forwarded-For 헤더)을 기반으로 Amazon EC2 인스턴스, 마이크로서비스 및 컨테이너와 같은 대상에 대한 HTTP/HTTPS 트래픽을 로드 밸런싱할 수 있습니다.
보안 기능
Amazon Virtual Private Cloud(VPC)를 사용할 경우 Elastic Load Balancing과 관련된 보안 그룹을 생성 및 관리하여 추가 네트워킹 및 보안 옵션을 제공할 수 있습니다. Application Load Balancer를 인터넷과 연결되도록 구성하거나 퍼블릭 IP 주소 없이 로드 밸런서를 생성하여 인터넷에 연결되지 않은 내부 로드 밸런서로 사용할 수 있습니다.
ALB는 http_desync_guardian 라이브러리를 기반으로 하는 비동기 보호 구현을 지원합니다. 이 새로운 기능을 통해 가용성 및/또는 지연 시간을 크게 손상시키지 않고도 비동기화로 인한 HTTP 취약성으로부터 고객 애플리케이션을 보호할 수 있습니다. 또한 고객은 애플리케이션 아키텍처에 따라 의심스러운 요청에 대한 허용 수준을 선택할 수 있습니다.
Outposts 지원
Application Load Balancer(ALB)가 AWS Outposts를 지원합니다. AWS Outposts는 AWS 인프라, 서비스 및 도구를 거의 모든 데이터센터, 코로케이션 공간 또는 온프레미스 시설로 확장하여 완벽하게 일관된 하이브리드 환경을 제공하는 완전관리형 서비스입니다. 고객은 지원되는 인스턴스 유형에서 ALB를 프로비저닝할 수 있으며, ALB는 수동 개입 없이 다양한 수준의 애플리케이션 로드를 충족하도록 랙에서 사용 가능한 용량까지 자동으로 스케일 업됩니다. 또한 고객은 로드 밸런싱 관련 용량 요구 사항을 확인하는 데 도움이 되는 알림을 받을 수 있습니다. 고객은 현재 해당 리전의 ALB와 마찬가지로 동일한 AWS Console, API 및 CLI를 사용하여 Outposts에서 ALB를 프로비저닝하고 관리할 수 있습니다.
HTTPS 지원
Application Load Balancer는 클라이언트와 로드 밸런서 간 HTTPS 종료를 지원합니다. 또한 AWS Identity and Access Management(IAM) 및 AWS Certificate Manager의 사전 정의된 보안 정책을 통해 SSL 인증서 관리도 제공합니다.
HTTP/2 및 gRPC 지원
HTTP/2는 새로운 버전의 HyperText Transfer Protocol(HTTP)로, 하나의 다중 연결을 사용하여 동일한 연결에서 복수의 요청을 전송하도록 허용합니다. 또한 헤더 데이터를 전송 전에 이진 형식으로 압축하고 클라이언트와의 SSL 연결을 지원합니다.
ALB는 마이크로서비스 간 또는 gRPC 지원 클라이언트와 서비스 간에 gRPC 트래픽을 라우팅하고 로드 밸런싱할 수 있습니다. 이를 통해 고객 클라이언트 또는 서비스의 기반 인프라를 변경하지 않고도 아키텍처에 gRPC 트래픽 관리 기능을 원활하게 도입할 수 있습니다. gRPC는 마이크로서비스 아키텍처에서 서비스 간 통신에 가장 많이 사용되는 프로토콜로 각광받고 있는 HTTP/2를 전송에 사용합니다. 효율적인 이진 직렬화와 다양한 언어 지원 등의 기능을 갖추고 있으며, 네트워크 공간 축소, 압축, 양방향 스트리밍과 같은 HTTP/2 고유의 이점을 제공하므로 REST와 같은 레거시 프로토콜보다 우수합니다.
TLS 오프로드
암호화된 연결(SSL 오프로드라고도 함)을 사용하는 HTTPS 리스너를 만들 수 있습니다. 이 기능을 사용하면 로드 밸런서와 SSL 또는 TLS 세션을 시작하는 클라이언트 간의 트래픽을 암호화할 수 있습니다. Application Load Balancer는 클라이언트 TLS 세션 종료를 지원합니다. 이를 통해 TLS 종료 작업을 로드 밸런서로 오프로드하는 동시에, 백엔드 애플리케이션의 소스 IP 주소를 유지할 수 있습니다. 규정 준수 및 보안 표준을 준수하기 위해 TLS 리스너에 대해 사전 정의된 보안 정책 중에서 선택할 수 있습니다. AWS Certificate Manager(ACM) 또는 AWS Identity and Access Management(IAM)를 사용하여 서버 인증서를 관리할 수 있습니다.
SNI를 사용하여 단일 TLS 리스너를 통해 여러 보안 웹 사이트를 지원할 수 있습니다. 클라이언트의 호스트 이름이 여러 인증서에서 일치하는 경우 로드 밸런서는 스마트 선택 알고리즘에 따라 사용할 최상의 인증서를 선택합니다.
스티키 세션
스티키 세션은 요청을 동일한 클라이언트에서 동일한 대상으로 라우팅하는 메커니즘입니다. Application Load Balancer는 지속 시간 기반 쿠키와 애플리케이션 기반 쿠키를 모두 지원합니다. 스티키 세션 관리의 핵심은 로드 밸런서가 사용자의 요청을 동일한 대상으로 일관되게 라우팅해야 하는 기간을 결정하는 것입니다. 스티키 세션은 대상 그룹 수준에서 활성화됩니다. 지속 시간 기반 고정성, 애플리케이션 기반 고정성, 고정성 없음의 조합을 모든 대상 그룹에 사용할 수 있습니다.
IPv6 기본 지원
Application Load Balancer는 VPC에서 인터넷 프로토콜 버전 6(IPv6)를 기본적으로 지원합니다. 따라서 클라이언트가 IPv4 또는 IPv6를 통해 Application Load Balancer에 연결할 수 있습니다.
요청 추적
Application Load Balancer는 로드 밸런서에 수신되는 모든 요청에 새로운 사용자 정의 식별자 "X-Amzn-Trace-Id" HTTP 헤더를 추가합니다. 요청 추적을 사용하면 웹 사이트와 분산 애플리케이션의 대량 트래픽을 구성하는 다양한 서비스에서 요청이 사용됨에 따라 고유한 ID별로 요청을 추적할 수 있습니다. 고유한 추적 식별자를 사용하여 애플리케이션 스택에서 모든 성능 또는 타이밍 문제를 개별 요청별로 세분화하여 확인할 수 있습니다.
리디렉션
Application Load Balancer는 하나의 URL에서 수신되는 요청을 다른 URL로 리디렉션할 수 있습니다. 여기에는 HTTP 요청을 HTTPS 요청으로 리디렉션하는 기능이 포함되어 있어, 안전한 브라우징의 규정 준수 목표를 충족하고, 사이트의 검색 순위와 SSL/TLS 점수를 높일 수 있습니다. 또한, 애플리케이션의 이전 버전에서 새로운 버전으로 리디렉션하는 등의 리디렉션 기능을 사용하여 사용자를 다른 웹 사이트로 보낼 수 있습니다.
정적 응답
Application Load Balancer는 애플리케이션에서 어떤 클라이언트 요청을 지원할지를 제어할 수 있습니다. 수신되는 요청을 애플리케이션으로 전달하지 않고도 HTTP 오류 응답 코드와 로드 밸런서 자체의 사용자 지정 오류 메시지로 해당 요청에 응답할 수 있습니다.
WebSocket 지원
WebSocket을 사용하면 최종 사용자가 서버로 업데이트를 요청(또는 폴링)할 필요 없이 서버가 최종 사용자와 실시간 메시지를 교환할 수 있습니다. WebSocket 프로토콜은 장기 실행 TCP 연결을 통해 클라이언트와 서버 간 양방향 통신 채널을 제공합니다
SNI(서버 이름 표시)
SNI(서버 이름 표시)는 TLS 핸드쉐이크 시작 시 클라이언트가 연결할 호스트 이름을 표시하는 TLS 프로토콜에 대한 확장 프로그램입니다. 로드 밸런서는 같은 보안 리스너를 통해 여러 개의 인증서를 제시할 수 있으므로 단일 보안 리스너를 사용하여 여러 개의 보안 웹 사이트를 지원하도록 할 수 있습니다. 또한, Application Load Balancer가 SNI를 사용한 스마트 인증서 선택 알고리즘을 지원합니다. 클라이언트가 표시하는 호스트 이름이 여러 인증서와 일치할 경우 로드 밸런서가 클라이언트의 기능을 포함한 여러 요소를 기반으로 사용할 최적의 인증서를 결정합니다.
IP 주소를 대상으로 사용
애플리케이션 백엔드의 IP 주소를 대상으로 사용하여 AWS 또는 온프레미스에 호스팅된 애플리케이션을 로드 밸런싱할 수 있습니다. 이를 통해 인스턴스의 모든 IP 주소 및 인터페이스에 호스팅된 애플리케이션 백엔드로 로드 밸런싱할 수 있습니다. 같은 인스턴스에 호스팅된 각 애플리케이션은 연결된 보안 그룹을 가질 수 있고 같은 포트를 사용할 수 있습니다. 또한, IP 주소를 대상으로 사용하여 온프레미스 위치(Direct Connect 또는 VPN 연결을 통해), 피어링된 VPC 및 EC2-Classic(ClassicLink 사용)에 호스팅된 애플리케이션을 로드 밸런싱할 수도 있습니다. AWS와 온프레미스 리소스에 걸쳐 로드 밸런싱할 수 있는 기능은 클라우드로 마이그레이션, 클라우드로 버스팅 또는 클라우드로 장애 조치하는 데 도움이 됩니다.
Lambda 함수를 대상으로 사용
Application Load Balancer에서 HTTP 요청을 처리하는 Lambda 함수를 호출하여 웹 브라우저를 포함한 모든 HTTP 클라이언트에서 서버리스 애플리케이션에 대한 사용자 액세스를 제공할 수 있습니다. Lambda 함수를 로드 밸런서의 대상으로 등록하고 콘텐츠 기반 라우팅 규칙에 대한 지원을 활용하여 요청을 다른 Lambda 함수로 라우팅할 수 있습니다. 서버 및 서버리스 컴퓨팅을 사용하는 애플리케이션에 대해 Application Load Balancer를 공통 HTTP 엔드포인트로 사용할 수 있습니다. Lambda 함수를 사용하여 전체 웹 사이트를 만들거나, EC2 인스턴스, 컨테이너, 온프레미스 서버 및 Lambda 함수를 결합하여 애플리케이션을 만들 수 있습니다.
콘텐츠 기반 라우팅
애플리케이션이 몇 개의 개별 서비스로 구성된 경우 Application Load Balancer는 호스트 필드, 경로 URL, HTTP 헤더, HTTP 메서드, 쿼리 문자열 또는 소스 IP 주소와 같은 요청의 콘텐츠를 기반으로 요청을 서비스로 라우팅할 수 있습니다.
호스트 기반 라우팅: HTTP 헤더의 호스트 필드를 기반으로 클라이언트 요청을 라우팅하여 동일한 로드 밸런서로부터 여러 도메인으로 라우팅할 수 있습니다.
경로 기반 라우팅: HTTP 헤더의 URL 경로를 기반으로 클라이언트 요청을 라우팅할 수 있습니다.
HTTP 헤더 기반 라우팅: 표준 또는 사용자 지정 HTTP 헤더의 값에 따라 클라이언트 요청을 라우팅할 수 있습니다.
HTTP 메서드 기반 라우팅: 표준 또는 사용자 지정 HTTP 메서드에 따라 클라이언트 요청을 라우팅할 수 있습니다.
쿼리 문자열 파라미터 기반 라우팅: 쿼리 문자열 또는 쿼리 파라미터를 기반으로 클라이언트 요청을 라우팅할 수 있습니다.
소스 IP 주소 CIDR 기반 라우팅: 요청이 시작된 곳의 소스 IP 주소 CIDR을 기반으로 클라이언트 요청을 라우팅할 수 있습니다.
컨테이너식 애플리케이션 지원
Application Load Balancer는 동일한 Amazon EC2 인스턴스의 여러 포트에 걸쳐 로드 밸런싱하여 향상된 컨테이너 지원을 제공합니다. Amazon Elastic Container Service(ECS)와 긴밀히 통합되어 완전관리형 컨테이너 상품을 제공합니다. ECS를 사용하면 ECS 작업 정의에서 동적 포트를 지정하여 EC2 인스턴스에서 예약된 경우 컨테이너에 미사용 포트를 부여할 수 있습니다. ECS 스케줄러가 이 포트를 사용하여 자동으로 로드 밸런서에 작업을 추가합니다.
웹 애플리케이션 방화벽
AWS WAF를 사용해 Application Load Balancer의 웹 애플리케이션을 보호할 수 있습니다. AWS WAF는 웹 애플리케이션 방화벽으로, 애플리케이션 가용성에 영향을 주거나, 보안을 위협하거나, 리소스를 과도하게 사용할 수 있는 일반적인 웹 악용으로부터 웹 애플리케이션을 보호합니다.
로드 밸런싱 알고리즘을 사용한 느린 시작 모드
Application Load Balancer는 라운드 로빈 로드 밸런싱 알고리즘을 지원합니다. 또한, Application Load Balancer는 라운드 로빈 알고리즘을 사용한 느린 시작 모드를 지원하므로 밀려드는 요청으로 대상에 부담을 주지 않고 새로운 대상을 추가할 수 있습니다. 느린 시작 모드에서는 대상이 사용자가 지정한 램프업 기간에 따라 적절한 양의 요청을 수락하기 전에 워밍업을 수행하게 됩니다. 느린 시작은 최적의 성능으로 요청에 응답할 수 있으려면 워밍업 기간이 필요하며 캐시를 사용하는 애플리케이션에 매우 유용합니다.
사용자 인증
앱의 인증 기능을 Application Load Balancer로 오프로드할 수 있습니다. Application Load Balancer는 사용자가 클라우드 애플리케이션에 액세스할 때 안전하게 사용자를 인증합니다. Application Load Balancer는 Amazon Cognito와 원활하게 통합되므로 최종 사용자가 Google, Facebook 및 Amazon과 같은 소셜 자격 증명 공급자와 SAML을 지원하는 Microsoft Active Directory 또는 모든 OpenID Connect 호환 자격 증명 공급자(IdP)와 같은 엔터프라이즈 자격 증명 공급자를 통해 인증할 수 있습니다. OpenID Connect와 호환되는 사용자 지정 IdP 솔루션이 이미 있는 경우, Application Load Balancer가 고객의 자격 증명 공급자에 직접 연결하여 엔터프라이즈 사용자를 인증할 수도 있습니다.