기존 Elastic Beanstalk으로 배포중이던 Spring boot 서버 환경에서
뭐하나 잘못건드렸는지 새로운 버전 배포시 CPU가 100% 찍히는 현상을 발견했다.
기존에도 물론 배포할 때 CPU가 높게 치긴 했지만 저정도는 아니였는데....
이참에 예약 인스턴스도 쓸겸 빌드, 배포 환경을 하나하나 설정해보고자 한다.
1. VPC 생성
VPC는 가상 프라이빗 클라우드(Virtual Private Cloud)의 약자로, 퍼블릭 클라우드 내에서 사용자가 독립적으로 사용할 수 있는 논리적으로 격리된 가상 네트워크를 의미합니다.
우선 AWS Management Console에 로그인하여 생성된 VPC를 확인한다.
보통 처음 생성하는 계정에는 기본 VPC 하나가 생성되어 있다.
여기에 추가로 loatodo-vpc를 생성하였다.
생성화면은 아래와 같다.
- 기본적으로 생성할 이름과 IPv4 CIDR을 설정한다.
- IPv6 CIDR이 필요한 겅우 설정할 수 있다.
- 테넌시는 기본값과 전용 두가지가 있다.
- 전용으로 하는 경우 전용 하드웨어에서 실행하기 떄문에 비용이 더 높다.
2. 서브넷 생성
서브넷은 네트워크를 더 작은 그룹으로 나누는 방법입니다.
Management Console에서 서브넷 페이지로 접속하여 "서브넷 생성" 버튼을 클릭해서 생성하거나
위에서 VPC를 생성할 때 생성 할 수도 있다.
나는 VPC생성할 때 같이 생성하였다.
- 가용 역역(AZ)
- 서로 다른 데이터 센터에 위치한 물리적 그룹으로, 각 AZ는 독립적인 전원 공급 장치, 네트워크, 냉각 시스템등을 갖추고 있다.
- 이러한 구조 덕분에 한 AZ에서 장애가 발생하더라도 다른 AZ의 서비스는 지속적으로 제공되므로, 시스템 가용성을 높일 수 있다.
- 퍼블릭 서브넷
- 인터넷 게이트웨이와 직접 연결되어 외부에서 직접 서브넷 내의 인스턴스에 액세스 할 수 있다.
- 프라이빗 서브넷
- 인터넷 게이트웨이와 직접 연결되어 있지 않아 외부에서 직접 서브넷 내의 인스턴스에 액세스 할 수 없다.
- NAT 게이트웨이를 사용하여 프라이빗 서브넷의 인스턴스가 인터넷에 액세스 하도록 허용할 수 있다.
3. 인터넷 게이트웨이 생성 후 VPC와 연결
인터넷 게이트웨이는 가상 프라이빗 클라우드(VPC)에서 VPC와 인터넷 간의 트래픽을 주고받도록 하는 가상 라우터입니다.
인터넷 게이트웨이는 간단하게 생성할 수 있다.
인터넷 게이트웨이 생성 직후 페이지에서 'VPC에 연결' 버튼을 클릭하면 VPC에 연결할 수 있다.
4. 라우팅 테이블 생성
라우팅 테이블은 네트워크에서 패킷을 목적지까지 전달하는 경로를 결정하는 데 사용되는 데이터 구조 입니다.
서브넷을 생성하고 라우팅 테이블을 따로 설정하지 않았으므로, 서브넷은 모두 기본 라우팅 테이블에 연결이 되어 있다.
콘솔의 라우팅 테이블에서 '라우팅 테이블 생성' 버튼을 이용하여 라우팅 테이블을 생성하는데
프라이빗, 서브닛 두 개를 생성한다.
그후 각 라우팅 테이블에 서브넷을 연결한다.
라우팅 테이블을 클릭하고 '서브넷 연결' > '서브넷 연결 편집'을 클릭한다.
5. 라우팅 규칙 설정
각 라우팅 테이블을 클릭한 후 '라우팅' > '라우팅 편집'을 클릭하여 라우팅 규칙을 편집할 수 있다.
퍼블릭 라우팅 규칙
- 기본 로컬
- 전체 요청에 인터넷 게이트웨이 연결
프라이빗 라우팅 규칙
- 기본 로컬
- 전체 요청에 NAT 게이트웨이 연결 (뒤에 추후 설명)
- S3 엔드포인트 연결 (뒤에 추후 설명)
6. NAT 게이트웨이 생성 후 프라이빗 라우팅 연결
AWS NAT 게이트웨이(NAT Gateway)는 Amazon Virtual Private Cloud(VPC)에서 프라이빗 서브넷의 인스턴스가 인터넷 및 기타 AWS 서비스에 연결할 수 있도록 하는 네트워크 주소 변환(NAT) 서비스입니다.
VPC내에서 생성된 인스턴스가 연결될 수 있도록 NAT 게이트웨이를 생성한다.
(private 서브넷과 연결해야 한다.)
그 후 라우팅 테이블에 프라이빗 테이블 규칙에 NAT 게이트웨이를 추가한다.
7. 엔드포인트 생성
AWS VPC에서 엔드포인트는 VPC 내부 또는 외부의 서비스에 대한 프라이빗 연결을 제공하는 기능입니다.
추후 Codebuild를 이용하기 위해 Codebuild에서 S3에 접근할 수 있도록 연결한다.
- 게이트웨이 엔드포인트 : VPC 내부의 인스턴스가 AWS 서비스 및 기타 VPC에 연결할 수 있도록 함
- 인터페이스 엔드포인트: VPC 내부의 인스턴스가 AWS 서비스에 연결할 수 있도록 함
8. 보안그룹 생성
보안 그룹은 가상 프라이빗 네트워크(VPC)에서 사용되는 방화벽 기능과 유사한 역할을 하는 서비스입니다.
보안 그룹은 VPC 내의 인스턴스를 네트워크 트래픽으로부터 보호하고, 원하는 트래픽만 허용하도록 설정할 수 있습니다.
인바운드 규칙 : VPC 외부에서 보안 그룹에 속한 인스턴스로 들어오는 네트워크 트래픽 제어
아웃바운드 규칙 : 보안 그룹에 속한 인스턴스에서 VPC 외부로 나가는 네트워크 트래픽 제어
VPC 서브넷의 인바운드 규칙을 설정해준다.
생성된 VPC 리소스 맵은 아래와 같다.