많은 요청이 들어올 때 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개의 인스턴스를 생성
- Instance 탭에서 [Launch Instances]
- Name and tags에서 Name 설정
- Application and OS Images(Amazon Machine Image) 설정
- Ubuntu, Ubuntu Server 24.04 LTS (HVM), SSD Volume Type (Free tier eligible)
- Instance type: t2.micro (Free tier eligible)
- Key pair (login): Proceed without a key pair (Not recommended) - SSH를 사용하지 않으므로 필요 X
- 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
- 기존에 사용하던 보안 그룹이 없는 경우 [Create Security group] 선택 후 다음 3가지 체크
- Advanced details: User data - optional 설정 - 인스턴스가 시작될 때 자동으로 실행되는 커맨드
- 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 설정
- Load balancers로 이동
- [Create load balancer]
- Load balancer types: Applicaton Load Balancer → [Create]
- Basic configuration: Load balancer name 설정
- Network mapping: Mappings 설정 - 모든 Zone 체크(하위 체크박스 모두 선택)
- Security groups: create a new security group으로 새로 설정 - Load Balancer가 외부에서 받는 것에 대한 설정
- Basic details: Security group name 설정
- Inbound rules: HTTP만 Anywhere-IPv4로 설정
- [Create security group]
- Listeners and routing: HTTP 80에 대한 Default action 설정 - 리스너를 받을 때 어느 타겟 그룹(EC2들)으로 갈지에 대한 설정
- [Create target group]
- Basic configuration 설정
- Choose a target type: Instances
- Target group name 설정
- [Next]
- Available instances에서 2개의 인스턴스 선택
- [Include as pending below]
- [Create target group]
- [Create load balancer]
- 생성된 Load balancer의 Details에서 DNS을 복사
- 브라우저 주소 창에서 접속
- 2개의 인스턴스 중 하나로 접속된 것을 확인 가능
- 새로고침을 하면 다른 인스턴스로 접속됨(IP로 확인 가능)
💡만약 2개의 인스턴스 중 하나가 꺼진다면 Load balancer가 남은 하나의 인스턴스에 모든 요청을 보냄
Target Groups에서 Healthy/Unhealthy/Unused 등으로 인스턴스의 상태를 알 수 있음
Load Balancer에게만 EC2가 공개되도록 설정
새로운 Security Group 생성
- [Create security group]
- Basic details: Security group name 설정
- Inbound rules: HTTP / Custom / Security Groups - Load Balancer로 설정
- [Create security group]
- Instances로 이동
- 인스턴스 선택 후 [Actions] → [Security] → [Change security groups]
- Associated security groups: 생성한 보안 그룹 선택 → [Add security group]
- 기존에 추가된 보안 그룹은 제거
- [Save]
💡2개의 인스턴스에 모두 적용!!
SSL 인증 적용
- Load Balancers로 이동
- Load Balancer 선택 → [Listeners and rules] → [Add listener]
- Listener details 설정
- Protocol: HTTPS
- Port: 443
- Secure listener settings: Policy name 값을 default 값으로 설정
- Default SSL/TLS server certificate: From ACM - 인증서 발급 후 추가
- [Request new ACM certificate]
- [Request a certificate]
- Certificate type: Request a public certificate → [Next]
- Fully quealified domain name 설정 - 개인 도메인
- [Request]
- [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 |