-
[AWS] 3-Tier Architecture 인프라 설계Backend/AWS 2022. 9. 25. 20:30728x90
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-0210.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-0210.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-0210.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-0210.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-0280 HTTP Instance kmr-ext-web-alb kmr-int-was-8080-lbtg kmr-was-ec2-01
kmr-was-ec2-028080 TCP Instance kmr-ext-int-nlb ALB : Client - ALB(80) - WEB(80)
ELB Name Scheme Type Port Configuration Added Instance
ID or NameAvailability
ZoneELB SG kmr-ext-web-alb ext
internet-facingalb 80(HTTP) fowarding to 80(HTTP) cnu-web-ec2-01
cnu-web-ec2-02AZ-C
AZ-Acnu-ext-web-lbsg NLB : WEB - NLB(8080) - WAS(8080)
ELB Name Scheme Type Port Configuration Added Instance
ID or NameAvailability
ZoneELB SG kmr-int-was-nlb int
internalnlb 8080(TCP) fowarding to 8080(TCP) cnu-was-ec2-01
cnu-was-ec2-02AZ-C
AZ-AN/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-02RDS 생성이전에완료 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'Backend > AWS' 카테고리의 다른 글
[AWS] AWS EC2에 ELK 세팅하기 (0) 2022.10.31 [AWS] EC2에 Kafka 서버 띄우기 (1) 2022.10.25 [AWS] 3-Tier Architecture에서의 Bastion Host 설정과 WEB, WAS, RDS 설정 및 연동 (0) 2022.09.25 [AWS] AWS 3-Tier Architecture 정리하기 (1) 2022.09.25 [AWS] 클라우드 컴퓨팅 / AWS란? (0) 2022.09.19