본문 바로가기

AWS

AWS Elastic Beanstalk 사용을 위한 VPN 구축 및 설정

회사가 운영하는 두개의 프로젝트를 하나의 AWS 계정으로 관리하고 있었지만(금융감독원 조건충족)? 을 위한 시스템 분리가 필요하다 해서 세부적인 요인은 개발자인 내가 알 필요는 없으니 그건 각설하고 편의를 위해 조건이 충족되어야할 

프로젝트를 A , 나뉘어질 프로젝트를 B 라고 하겠다.


인생 처음으로 블로그를 쓰며 남들이 보기엔 터무니 없이 부족하겠지만 시작이 반이라고 반을 하도록 하겠다.
참고로 이건 설명하는 글이 아닌 내가 다른 프로젝트를 새로 또 구축을 할때  빠르게 구축하게 하기 위한 글이므로
기술에 대한 자세한 설명은 없으니 그건 따로 공부하도록 하고 그냥 기술에 대한 이해없이 빨리 구축하고 싶다면 참고하도록

기존시스템 문제점
A와 B는 같은 AWS 계정에 같은 VPN을 공유하고 있었고 서브넷 마스크도 세분화 하지 않았다.

물론 같은 VPC를 사용하고 있으니 ssh key 와 aws access key 같은 모든 것들이 하나로 통일 되고 있어 보안점이 취약했던건 사실이었다. 

 

내가 맡은 임무는 다음과 같다.
AWS 계정을 둘로 나눠서 A 와 B 프로젝트 둘다 Default VPC를 쓰지 않고 dev , prod 환경을 나누고 전부 새로 구축한다.



필자는 aws codecommit repo 를 사용하고 있다. ( github repo 와 거의 동일 ) repo를 받아오기 위해 ssh key 값으로 가져오게 설정을 했었는데 여러개의 계정으로  동일하게 하려면 아래와 같이 설정이 필요하다. (맥 os 기준)


물론 aws 접근키도 나눠서 사용해야 한다.

 

이제 다 계정을 이용하기 위한 준비가 끝났다. 저걸 한 이유는 Elastic beanstalk 배포를 할때 
config 설정별 다른 환경 배포를 자동화 하기 위함이다.
이제 제대로 VPC 를 구축해볼 차례다.



1. VPC 

aws vpc 콘솔로 들어가 vpc 를 새로 만든다.
필자는 dev-vpc 와 pro-vpc 로 나눠서 구축했다.
세부사항은 대동소이 하니 dev-vpc를 기준으로 쓰겠다.

 

Name : dev-vpc
IPv4 CIDR block (대역폭) : 10.11.0.0/16 (솔직히 이건 정하기 나름이라 알아서 정하도록)
IPv6 는 사용하지 않는다.


2. SubNet

vpc network 환경을 구축했으면 subnet을 달아줘야 하는데 
서브넷은 그냥 VPN를 잘게 나누었다고 생각하면된다.

외부에서 접속이 안되게 하는 Private Subnet 과 ( NAT 와 연결 해야함 ) 
외부에서 접속 가능한 Public Subnet으로 나누어야 한다. ( Internet Gateway와 연결)

필자는 서울 가용지역(ap-northeast-2)에 A와 C에 각각 3개씩 ( public , data-private , server-privvate )
넷마스크 24로 설정했다.


3. Route table

1. public-routing 을 생성해 2개의 퍼블릭 서브넷을 연결 후 route 에 인터넷 게이트웨이를 추가한다.
Destination : 0.0.0.0/0
Target : vpc에 속한 인터넷 게이트웨이

2.private-routing 을 생성해 4개의 프라이빗 서브넷을 연결 후 NAT gateway 를 생성한다.
NAT 게이트웨이는 외부에서 퍼블릭 서브넷을 거쳐 내부로 들어가게 해줄수 있는 길이라고 보면 되는데 그러기 위해선 
NAT 게이트웨이에는 퍼블릭 서브넷을 설정해야 한다. 가용영역은 선택이고 퍼블릭 IP를 할당하면 된다.
이후 private-routing 에 NAT 게이트웨이를 추가한다.
Destination : 0.0.0.0/0
Target : 해당 vpc 에 속한 NAT 게이트웨이

4. Elastic Beanstalk 을 이용한 EC2 Instance , Load Balancer , Auto Scailing 추가 및 환경 설정

드디어 Elastic Beanstalk 에 들어왔다. EC2 Instance 관리와 Load Balancer 를 세부적으로 다루기는 애매하지만 
처음 배포환경을 구축하기엔 초~중급 프로그래머에겐 좋은 선택일 것 같다.
필자는 사용하는 백엔드 프로그래밍 언어가 Go 다.
아마 많이 처음 시작할때 NodeJS를 쓰지 않을까 싶다. 이건 뭐 선택하기 나름이니 넘어가겠다.

이제 여기에 우리가 위에 설정했던 VPN 을 기반으로 환경 설정을 한 후 배포해야 한다.
Custom Configuration 을 들어가 자기 환경에 맞게 설정하면 된다.
이건 테스트 서버 환경을 구축한 거기 때문에 성능이 낮은 인스턴스를 골라서 선택하면 된다.
Network 설정에서는 Load Balancer 는 2개의 퍼블릭 서브넷을 넣어주고
인스턴스 설정에는 서버 로 만든 2개의 프라이빗 서브넷을 넣어줬다.

Health 가 Ok 가 되면 정상적으로 배포가 된거다.
빨간색으로 가려진 부분을 클릭해보면 샘플 어플리케이션을 배포한 사람은 기본 루트 html을 반환할 것이다.
필자는 아까 설정한 aws conifg 로 터미널에서 내 코드를 배포했다.
터미널을 이용해 배포해보고 싶다면 아래 링크로 가서 구현해보자.

https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/eb-cli3-configuration.html

 

EB CLI 구성 - AWS Elastic Beanstalk

Windows에서 .ebignore 파일을 추가하면 EB CLI가 심볼 링크를 따라가서 소스 번들을 만들 때 연결된 파일을 포함시킵니다. 이는 알려진 문제로 향후 업데이트에서 수정될 예정입니다.

docs.aws.amazon.com

 

EC2 Load Balancer Target Group 에서 Health 체크를 URL 을 제대로 설정해주지 않으면 서버는 Severe 를 반환하니 참고하자.