AWS

[AWS] Elastic Load Balancer (ELB)

Happy._. 2024. 6. 25. 11:48

많은 요청이 들어올 때 Load Balancer가 요청들을 다양한 EC2 서버들에게 분산해 나눠주며 

Load Balancer의 특징

  • HTTP 요청을 여러 타깃 그룹에 나눠줄 수 있음
  • 한 머신안이라도 여러 애플리케이션(컨테이너)에 나눠줄 수 있음
  • HTTP/2와 웹소켓을 지원
  • HTTPS로 리다이렉트 지원
  • URL, hostname, query string, header에 기반해서 다른 타깃 그룹으로 보낼 수 있음

Load Balancer를 사용하는 이유

  • 요청 분산(EC2와 연동)
  • 단일 액세스 포인트 공개(Route 53과 연동)
  • 인스턴스에 대한 헬스 체크
  • HTTPS 제공(ACM과 연동)
    • Amazon Certification Manager: HTTP → HTTPS로 바꾸는 기능
  • 고가용성 제공
  • 공개 트래픽과 내부 트래픽 분리

ELB의 종류

  • Classic Load Balancer - deprecated
  • Application Load Balancer
    • URL, Query String 기준으로 컨텐츠의 요청을 보내는 것
  • Network Load Balancer
    • 많은 Throttle이 있을 때 low latency로 제공을 해야할 때 사용
  • Gateway Load Balancer
    • 방화벽과 third party의 애플리케이션들을 가져다 사용할 때 사용

ELB 보안 그룹 설정

  • User가 Load Balancer에 접근을 할 때의 Load Balancer 보안 그룹
      • User들과 Load Balancer 사이에는 HTTP/HTTPS를 모든 IP에서 공개
  • Load Balancer와 EC2 사이의 보안 그룹
    • Load Balancer와 EC2 사이에는 EC2를 오로지 Load Balancer한테만 공개

.💡보안 그룹 IP 출처를 IP가 아니라 특정 보안 그룹을 출처 허용

Load Balancer 사용을 위해 2개의 인스턴스를 생성

  1. Instance 탭에서 [Launch Instances]
  2. Name and tags에서 Name 설정
  3. Application and OS Images(Amazon Machine Image) 설정
    • Ubuntu, Ubuntu Server 24.04 LTS (HVM), SSD Volume Type (Free tier eligible)
  4. Instance type: t2.micro (Free tier eligible)
  5. Key pair (login): Proceed without a key pair (Not recommended) - SSH를 사용하지 않으므로 필요 X
  6. Network settings: 기존에 HTTP/HTTPS/SSH가 열려있는 보안 그룹 사용
    • 기존에 사용하던 보안 그룹이 없는 경우 [Create Security group] 선택 후 다음 3가지 체크
      • Allow SSH traffic from - Anywhere 0.0.0.0/0
      • Allow HTTPS traffic form the internet
      • Allow HTTP traffic from the internet
  7. Advanced details: User data - optional 설정 - 인스턴스가 시작될 때 자동으로 실행되는 커맨드
  8. Summary: Number of instances를 2로 설정(인스턴스 2개를 켜야 Load balancer로 나눠줄 수 있음)

< User data - optional >

#!/bin/bash
apt-get update
apt-get install -y nginx
cat <<EOF > /var/www/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx</title>
</head>
<body>
<h1>Hello World!</h1>
<p>AWS deployed by Me!</p>
<p>private ip is $(hostname -f)</p>
</body>
</html>
EOF
sudo systemctl start nginx
  • apt-get update: 패키지들을 가져옴
  • apt-get install -y nginx: nginx 설치
  • cat <<EOF > ... EOF: /var/www/html/index.html에 다음 내용들을 작성
  • sudo systemctl start nginx: nginx 실행

Load Balancer 설정

  1. Load balancers로 이동
  2. [Create load balancer]
  3. Load balancer types: Applicaton Load Balancer → [Create]
  4. Basic configuration: Load balancer name 설정
  5. Network mapping: Mappings 설정 - 모든 Zone 체크(하위 체크박스 모두 선택)
  6. Security groups: create a new security group으로 새로 설정 - Load Balancer가 외부에서 받는 것에 대한 설정
    1. Basic details: Security group name 설정
    2. Inbound rules: HTTP만 Anywhere-IPv4로 설정
    3. [Create security group]
  7. Listeners and routing: HTTP 80에 대한 Default action 설정 - 리스너를 받을 때 어느 타겟 그룹(EC2들)으로 갈지에 대한 설정
    1. [Create target group]
    2. Basic configuration 설정
      1. Choose a target type: Instances
      2. Target group name 설정
    3. [Next]
    4. Available instances에서 2개의 인스턴스 선택
    5. [Include as pending below]
    6. [Create target group]
  8. [Create load balancer]
  9. 생성된 Load balancer의 Details에서 DNS을 복사
  10. 브라우저 주소 창에서 접속
    • 2개의 인스턴스 중 하나로 접속된 것을 확인 가능
    • 새로고침을 하면 다른 인스턴스로 접속됨(IP로 확인 가능)

💡만약 2개의 인스턴스 중 하나가 꺼진다면 Load balancer가 남은 하나의 인스턴스에 모든 요청을 보냄

     Target Groups에서 Healthy/Unhealthy/Unused 등으로 인스턴스의 상태를 알 수 있음

Load Balancer에게만 EC2가 공개되도록 설정

새로운 Security Group 생성

  1. [Create security group]
  2. Basic details: Security group name 설정
  3. Inbound rules: HTTP / Custom / Security Groups - Load Balancer로 설정
  4. [Create security group]
  5. Instances로 이동
  6. 인스턴스 선택 후 [Actions] → [Security] → [Change security groups]
  7. Associated security groups: 생성한 보안 그룹 선택 → [Add security group]
  8. 기존에 추가된 보안 그룹은 제거
  9. [Save]

💡2개의 인스턴스에 모두 적용!!

SSL 인증 적용

  1. Load Balancers로 이동
  2. Load Balancer 선택 → [Listeners and rules] → [Add listener] 
  3. Listener details 설정
    • Protocol: HTTPS
    • Port: 443
  4. Secure listener settings: Policy name 값을 default 값으로 설정
  5. Default SSL/TLS server certificate: From ACM - 인증서 발급 후 추가
    1. [Request new ACM certificate]
    2. [Request a certificate]
    3. Certificate type: Request a public certificate → [Next]
    4. Fully quealified domain name 설정 - 개인 도메인
    5. [Request]
  6. [Add]

💡Certificate을 발급받기 위해서는 개인 도메인이 필요!!

 

 

'AWS' 카테고리의 다른 글

[AWS] Simple Storage Service (S3)  (0) 2024.06.25
[AWS] Relational Database Service (RDS)  (0) 2024.06.25
[AWS] Elastic Compute Cloud  (0) 2024.06.24
[AWS] Identity and Access Management  (0) 2024.06.18