AWS Fargate와 Docker를 활용한 Auto Scale Serverless 개발하기: AWS VPC, 보안그룹, ALB 만들기

Jake Yang
8 min readFeb 26, 2019

--

안녕하세요, 트남 Jake 입니다.

우선 이번 강좌에 등장할 용어를 몇 개 정의 해 보겠습니다.

용어 정의

VPC

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/what-is-amazon-vpc.html

Virtual Private Cloud의 약자로 AWS 전용 가상 네트워크 입니다. 이 안에 모든 것들이 구성이 됩니다. (비유:학교)

위 그림에서는 (복잡해서) 생략했지만 VPC 안에는 서브넷, 인터넷 게이트웨이, 라우팅 테이블이 존재합니다.

  • 서브넷 : 네트워크 파티션이라 생각하시면 됩니다. (비유:학교내 건물)
  • 인터넷 게이트웨이 : 네트워크 패킷이 지나는 통로. (비유: 학교 정문/후문)
  • 라우팅 테이블 : 서브넷과 인터넷 게이트웨이를 연결 시켜주는 테이블. (비유: 건물에서 정문/후문 까지의 길)

보안 그룹

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-network-security.html?icmpid=docs_ec2_console

방화벽 설정이라 생각하시면 됩니다. (비유:학교의 모든 문. 교실문,화장실문,교문,정문,후문…)

ALB

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/userguide/what-is-load-balancing.html?icmpid=docs_elbv2_console

Application Load Balancer의 약자로, 말 그대로 로드밸런서입니다. 트래픽 분산, Forwarding, Health Check 등을 담당합니다. (비유: 선도부)

이해를 돕기위해 학교를 예를 들어 설명 해 보겠습니다.

VPC는 학교(시스템)입니다. 한 VPC에는 한 학교만 존재합니다. 다른 학교를 설립하기 위해서는 다른 VPC가 필요합니다. 서로 다른 VPC간 통신을 위해서는 VPC Peering이 필요합니다.

학교안에 신관, 본관 건물이 분리되어 존재할 수 있듯이 서브넷 또한 여러개 존재할 수 있습니다. 보안적인 측면이나 운영을 위해서 구분하여 사용하도록 합니다. 가령, 서브넷A는 DB, 서브넷B는 App, 이런식으로요.

보안그룹은 학교의 “문"이라고 생각하시면 됩니다. 가령, “보안그룹A=앞문,뒷문", “보안그룹B=창문" 이라고 생각 해 봅시다. 1학년1반은 보안그룹A를, 1학년2반은 보안그룹B를 사용한다고 가정하면, 1반은 앞문과 뒷문으로 출입이 가능합니다. 2반은 창문으로만 출입이 가능합니다. 보안그룹은 일종의 템플릿과 같이 한번 설정된 리스트를 여러 Instance에서 사용 가능합니다.

ALB는 선도부와 같습니다. 평소 1학년 1반 학생들은 너무 어수선하여 선도부가 복도에 배치 되어있다고 가정 해 봅시다. 문이 두개 뿐이라 입/출입이 많은 1반 학생들은 질서가 필요합니다. 선도부는 한번은 앞문, 한번은 뒷문 순차적으로 입/출입을 시켜 혼잡을 예방하고 있습니다. 이와같이, ALB는 한개 또는 여러개의 Instance(Application)에게 트래픽을 전달하는 용도로 사용됩니다. 이때 여러 유용한 기능을 함께 사용할 수 있어 AWS의 매우 중요한 기능 중 하나 입니다.

이제 각 요소들을 생성 해 보도록 하겠습니다.

VPC 마법사

VPC 마법사를 사용하면 VPC, 서브넷, 라우팅 테이블, 인터넷 게이트웨이까지 편리하게 한번에 생성할 수 있습니다. VPC안에 네트워크를 구성하기위한 필수 요소입니다. 자세한 설명은 생략하고 일단 만들어 보겠습니다.

  1. https://ap-northeast-2.console.aws.amazon.com/vpc/home?region=ap-northeast-2 로 이동합니다.
  2. “VPC 마법사 시작" 클릭
  3. “단일 퍼블릭 서브넷이 있는 VPC” 선택
  4. VPC 이름, 가용 영역, 서브넷 이름을 수정합니다. 가용 영역은 총 2개 이상이 필요한데, 여기서는 1개만 만들 수 있으니 1개를 선택 후 나중에 다른 영역을 추가하겠습니다.
  5. “VPC 생성” 클릭

서브넷 추가

  1. https://ap-northeast-2.console.aws.amazon.com/vpc/home?region=ap-northeast-2#subnets:sort=SubnetId 로 이동합니다.
  2. “서브넷 생성"을 클릭합니다.
  3. VPC는 생성한 VPC를 선택, 가용 영역은 위에서 선택하지 않은 다른 영역을 선택, CIDR 블록은 “10.0.1.0/24” 를 입력합니다.
  4. “생성"을 클릭합니다.

라우팅테이블 인터넷게이트웨이 연결

  1. https://ap-northeast-2.console.aws.amazon.com/vpc/home?region=ap-northeast-2#RouteTables:sort=routeTableId 로 이동합니다.
  2. 생성되어진 라우트를 선택 후 “작업” → “Edit routes” 클릭합니다.
  3. Destination에 “0.0.0.0/0”, Target에는 생성된 인터넷게이트웨이를 선택합니다. (Internet Gateway 누르면 목록에 나올겁니다)
  4. “Save routes” 로 저장.

보안 그룹 생성

  1. https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2#SecurityGroups:sort=groupName 로 이동합니다.
  2. “보안 그룹 생성" 클릭합니다.
  3. 아래 스샷처럼 입력합니다. 우리 서버는 외부 접속이 가능하기 때문에 “위치 무관"으로 선택합니다.
  4. “생성"

3000은 어플리케이션 접근 포트, 80과 443은 나중에 접속할 HTTP,HTTPS 입니다. 미리 만들어 놓습니다 ^^

ALB 생성

단계 1: 로드 밸런서 구성

  1. https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2#LoadBalancers: 로 이동합니다.
  2. “로드 밸런서 생성" 클릭합니다.
  3. “HTTP / HTTPS 생성" 클릭합니다.
  4. 이름, 인터넷연결, ipv4, HTTP, 가용영역을 아래와 같이 입력합니다.
  • 외부연결이기 때문에 “인터넷 연결”을 선택해야 합니다.
  • 이번 강좌에는 HTTP만 사용하도록 하겠습니다. HTTPS는 인증서가 필요하기 때문에 나중에 강좌에서 이 부분을 설명하도록 하겠습니다.
  • 가용 영역은 꼭 2개 이상 선택하셔야 합니다. (그래서 따로 서브넷을 추가 하였지요)

로드밸런서는 크게 ALB(Application Load Balancer)와 NLB(Network Load Balancer) 2종류가 있습니다. 간단하게 용도를 설명하면, ALB(HTTP/HTTPS)는 주로 Stateless/Restful한 웹서버에 사용하기 좋고, NLB(TCP/TCL)은 웹소켓과 같은 HTTP 이외의 TCP 사용에 좋다고 생각하시면 됩니다.

단계 2: 보안 설정 구성

HTTPS 등 보안 기능을 사용하지 않기 때문에 그냥 넘깁니다. 차후 인증서 발급 및 HTTPS 사용에 대한 강좌로 찾아뵙겠습니다. (쿨럭)

단계 3: 보안 그룹 구성

위에서 생성한 보안 그룹을 선택 합니다.

단계 4: 라우팅 구성

로드밸런서에서 실제 어플리케이션으로 전달되는 방법을 설정합니다. HelloNode 어플리케이션은 HTTP:80(ALB) 으로 들어와 HTTP:3000(Application) 으로 전달될 예정입니다.

이름을 입력하고, 대상 유형은 “IP”로 선택합니다. 우리가 사용할 Fargate 서비스는 IP를 사용하여 연결할 수 있습니다.

단계 5: 대상 등록

만약 이미 생성된 ECS(Fargate) 또는 EC2 인스턴스가 있다면 여기서 바로 연결할 수 있습니다. 우리는 아직 생성하지 않았으므로 그냥 넘깁니다.

단계 6: 검토

“생성"

간단한 개념과 방법으로 진행 해 보았습니다. Fargate 서비스 생성시에도 설정할 수 있지만, 개념 정리와 재사용을 위해 직접 생성 해 보았습니다. 그럼 다음 강좌에서 뵐게요.

--

--