Backend/AWS
[AWS] 3-Tier Architecture 인프라 설계
mirae.kwak
2022. 9. 25. 20:30
728x90
AWS 3-Tier Architecture
- WEB-WAS-DB로 이루어진 3 계층 구조
- Bastion 호스트를 두어 private 망에 접근하며 Nat 게이트웨이와 인터넷 게이트웨이를 통해 외부와 통신
- Bastion Host
- 외부에서 접근 불가능한 Private 망에 접근하기 위해 Public 망에 Bastion Host를 두어 Private 망에 접근
- Private 망내의 서버들은 Public 망에 위치한 Nat 게이트웨이와 인터넷 게이트웨이를 통해 외부와 통신
- 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트
- Bastion 서버 한곳에서 모든 접근을 관리함으로써, 관리가 수월하며 모든 접근에 대한 로그 또한 한 곳에서 확인 가능
- Bastion Host를 통해 접근하면 특정 IP만 접근 가능하도록 설정이 가능
- Bastion Host
- 2개의 가용영역(AZ-C, AZ-A)을 사용하여 WEB, WAS 모두 두개씩 존재
- ELB를 통해 부하분산을 이루며 WEB 서버로의 부하 분산을 위해 ALB, WAS 서버로의 부하분산을 위해 NLB를 사용
- EC2 - WEB, WAS / RDS - DB
인프라 설계
VPC
사용자가 정의한 논리적으로 분리된 클라우드 네트워크
- Seoul Region으로 ap-northeast-2로 생성
- Seoul Region의 경우 a, b, c, d 4개의 가용영역이 존재
- 그 중 a, c 2개의 가용영역 사용
Subnet
VPC내에서 IPv4 주소가 CIDR 블록에 의해 나눠진 주소 단위
- AWS 3 계층 구조에서 볼 수 있듯이 8개의 서브넷이 존재
- a, c 가용영역에 대해 계층별 서브넷 생성
- ext - bastion, nat
- int1 - WEB
- int2 - WAS
- dat1 - DB
IGW (Internet Gateway)
- IGW 생성 후 VPC attach 작업을 해주어야 함
NAT (NAT Gateway)
Private Subnet의 인터넷을 향한 Outbound 트래픽 허용
Routing Table
Route Table Name | Associated Subnet | Destination | Target | Description |
kmr-ext-rt | kmr-ext1-c-01 kmr-ext1-a-02 |
10.0.10.0/16 | Local | VPC Default 경로 |
0.0.0.0/0 | kmr-igw-01 | 인터넷트래픽을 igw로 전달 | ||
kmr-int1-rt | kmr-int1-c-01 kmr-int1-a-02 |
10.0.10.0/16 | Local | VPC Default 경로 |
0.0.0.0/0 | kmr-nat-01 | 인터넷트래픽을 nat로 전달 | ||
kmr-int2-rt | kmr-int2-c-01 kmr-int2-a-02 |
10.0.10.0/16 | Local | VPC Default 경로 |
0.0.0.0/0 | kmr-nat-01 | 인터넷트래픽을 nat로 전달 | ||
kmr-dat1-rt | kmr-dat1-c-01 kmr-dat1-a-02 |
10.0.10.0/16 | Local | VPC Default 경로 |
Default Routing Table | N/A | 10.0.10.0/16 | Local | VPC Default 경로 |
- Nat 게이트웨이를 통해 Private 망이 외부와 통신하기 때문에 WEB 서버와 WAS에 해당하는 kmr-int1-rt, kmr-int2-rt 서브넷의 경우 0.0.0.0/0의 경우 nat gateway로 연결
Security Group
인스턴스에 대한 Inbound와 Outbound 트래픽 제어 가상 방화벽
SG Name | Inbound Rule | |||
protocol | Port Range | Source | Description | |
kmr-ext-bastion-sg | TCP | 22 | My IP | SSH 접속 개인 IP |
kmr-ext-web-lbsg | TCP | 80 | 0.0.0.0/0 | 외부서비스 Inbound |
kmr-int-web-sg | TCP | 80 | kmr-ext-web-lbsg | 80 서비스 WEB LB |
TCP | 22 | kmr-ext-bastion-sg | SSH 접속 Bastion | |
kmr-int-was-sg | TCP | 8080 | 10.10.30.0/24 | 8080 WEB C Inbloud |
TCP | 8080 | 10.10.40.0/24 | 8080 WEB A Inbloud | |
TCP | 22 | kmr-ext-bastion-sg | SSH 접속 Bastion | |
kmr-int-mysql-sg | TCP | 8080 | kmr-int-was-sg | Mysql Connetion WAS |
TCP | 8080 | kmr-ext-bastion-sg | Bastion |
- kmr-ext-bastion-sg
- SSH 접근을 위해 22번 port를 허용
- kmr-ext-web-lbsg
- WEB 로드밸런서에 대한 외부 서비스 접근 허용
- kmr-int-web-sg
- WEB 로드밸런서의 접근 허용
- bastion을 통한 ssh 접근을 위해 22 포트 허용
- kmr-int-was-sg
- AZ-C, AZ-A에 존재하는 WEB 서버 각각에 대해 접근 허용
- bastion을 통한 ssh 접근을 위해 22 포트 허용
- kmr-int-mysql-sg
- WAS 서버 접근 허용
- bastion을 통해 mysql client 접근을 위해 3306 포트 허용
EC2 (Elastic Cloud Computing)
AWS 가상 컴퓨팅을 위한 인스턴스 생성
Instance Name | 용도 | AZ | Subnet | Security Group | DHCP IP |
kmr-bastion-c-ec2-01 | Bastion | AZ-C | kmr-ext1-c-01 | kmr-ext-bastion-sg | 10.10.10.10 |
kmr-web-c-ec2-01 | web | AZ-C | kmr-int1-c-01 | kmr-int-web-sg | 10.10.30.11 |
kmr-web-a-ec2-02 | web | AZ-A | kmr-int1-a-02 | kmr-int-web-sg | 10.10.40.11 |
kmr-was-c-ec2-01 | web | AZ-C | kmr-int2-c-01 | kmr-int-was-sg | 10.10.50.22 |
kmr-was-a-ec2-02 | web | AZ-A | kmr-int2-a-02 | kmr-int-was-sg | 10.10.60.22 |
- Instance Type : T2.micro
- OS : Ubuntu 20.04
- Root Volume : 30 GB
- bation, web, was 용 인스턴스 생성
- DHCP IP의 경우 자동 생성도 되지만 편리하게 이용하기 위해 IP를 지정
- WEB의 경우 11, WAS의 경우 22로 IP주소가 끝나도록 함
ELB (Elastic Load Balancer)
ALB (Application Load Balancer)
- 이름에 Application이 붙은 것처럼 application layer에서 작동
- HTTP/HTTPS 트래픽을 처리하는 로드밸런싱에 최적화
- ALB는 path-based routing을 지원하여 인스턴스들은 여러개의 URL과 path를 가질 수 있음
NLB (Network Load Balancer)
- 이름에 Network가 붙은 것처럼 Network layer에서 작동
- TCP/UDP 트래픽을 로드밸런싱하여 내부 인스턴스로 전달
- TCP/UDP 서버를 구축할 때 NLB는 굉장히 낮은 지연시간으로 최적의 성능
- 로드밸런서에 대한 고정 IP 주소를 지원
LB Target Group
AWS ELB가 트래픽을 전달하는 대상을 지정
ELB Name | Target Instance | Port | Protocol | Target Type | LB |
kmr-int-web-80-lbtg | kmr-web-ec2-01 kmr-web-ec2-02 |
80 | HTTP | Instance | kmr-ext-web-alb |
kmr-int-was-8080-lbtg | kmr-was-ec2-01 kmr-was-ec2-02 |
8080 | TCP | Instance | kmr-ext-int-nlb |
ALB : Client - ALB(80) - WEB(80)
ELB Name | Scheme | Type | Port Configuration | Added Instance ID or Name |
Availability Zone |
ELB SG |
kmr-ext-web-alb | ext internet-facing |
alb | 80(HTTP) fowarding to 80(HTTP) | cnu-web-ec2-01 cnu-web-ec2-02 |
AZ-C AZ-A |
cnu-ext-web-lbsg |
NLB : WEB - NLB(8080) - WAS(8080)
ELB Name | Scheme | Type | Port Configuration | Added Instance ID or Name |
Availability Zone |
ELB SG |
kmr-int-was-nlb | int internal |
nlb | 8080(TCP) fowarding to 8080(TCP) | cnu-was-ec2-01 cnu-was-ec2-02 |
AZ-C AZ-A |
N/A |
RDS Subnet Group
RDS 인스턴스가 설치되는 서브넷의 그룹을 지정
Subnet Group Name | AZ | Subnet | 비고 |
kmr-mysql-sbngroup-01 | AZ-C, AZ-A | kmr-dat1-c-sbn-01 kmr-dat1-a-sbn-02 |
RDS 생성이전에완료 |
RDS
AWS의 관리형 Relation Database 서비스
Instance Name | 용도 | Instance Type | Master Id | Master pw | AZ | Port |
kmr-mysql-rds | db | db.t3.micro | admin | ***** | AZ-C, AZ-A | 3306 |
탄력적 IP
bastion instance의 public ip를 위해 탄력적 ip를 생성 후 bastion에 지정
728x90