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만 접근 가능하도록 설정이 가능
  • 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