본문 바로가기
공부/AWS

[AWS] public subnet에 EC2, private subnet에 RDS 인스턴스 생성하기 (1)

by 웅대 2023. 5. 2.
728x90
반응형

이번 포스팅에서는 public subnet에 EC2 인스턴스를 생성하고 privatet tsubnet에 RDS 인스턴스를 생성해서 통신할 예정이다.

 

다음 다이어그램은 우리가 만들 aws 아키텍처이다.

EC2는 인터넷 게이트웨이와 연결해서 외부와 통신이 가능하게하고 RDS는 privte subnet에 두고 EC2 인스턴스에서만 접근할 수 있도록 설정할 예정이다.

 

기본 설정들을 사용하면 쉽게 만들 수 있겠지만 하나하나 직접 만들어보려고 한다.

 

이번 포스팅에서 public subnet과 EC2를, 다음 포스팅에서 private subnet과 RDS를 만들어보려고 한다.

 

1. VPC 생성

VPC에서 VPC 생성을 클릭한다.

IPv4 CIDR은 10.0.0.0/16로 설정해두고 IPv6 CIDR은 "없음"을 선택 후 이름 태그에는 원하는 이름을 작성하고 VPC를 생성한다.

 

2. public subnet 생성

이제 public subnet을 만들 차례이다.

 

VPC -> 서브넷 -> 서브넷 생성을 클릭한다.

 

이전에 만든 VPC를 선택한다. VPC를 생성할 때 이름 태그를 설정해두었으면 쉽게 찾을 수 있다.

 

원하는 서브넷 이름을 설정하고 (public, private 구분하기 쉽게 public을 붙여준다.) 가용 영역은 2a로 IPv4 CIDR 블록은 10.0.1.0/24로 정하고 서브넷을 생성한다.

방금 생성한 서브넷은 public 서브넷으로 사용할 예정이다.

 

그런데 이렇게 서브넷만 만들면 public subent이 되는 것이 아니다.

 

public subnet은 외부와 통신할 수 있어야 하는데 현재 상태로는 외부와 통신할 수 없다.

 

외부와 통신하기 위해서는 인터넷 게이트웨이와 연결을 해야한다.

 

아키텍처 다이어그램을 다시 보자.

 

인터넷 게이트웨이를 생성해서 VPC와 연결하고 public subnet의 라우팅 테이블을 사용하여 인터넷 게이트웨이로 라우팅 해주면 된다.

 

반대로 private subnet의 경우 라우팅 테이블에서 인터넷 게이트웨이로 라우팅하지 않도록 하면 될 것이다.

 

3. 인터넷 게이트웨이 생성

VPC -> 인터넷 게이트웨이 -> 인터넷 게이트웨이 생성에 들어간다.

원하는 이름을 지어주고 인터넷 게이트웨이를 생성한다.

 

방금 생성 인터넷 게이트웨이를 VPC에 연결해주면 된다.

역시 우리가 직접 생성했던 VPC를 선택하면 된다.

4. 퍼블릭 서브넷 라우팅 테이블 생성

이제 퍼블릭 서브넷의 라우팅 테이블에 이 인터넷 게이트웨이로 라우팅해주면 된다.

 

VPC -> 라우팅 테이블 -> 라우팅 테이블 생성에 들어간다.

 

원하는 이름을 지어주고 VPC는 우리가 만들었던 VPC를 선택하고 생성한다.

생성하고 보면 아래와 같이 하나만 존재할 것이다. 

위의 의미는 10.0.0.0/16 (VPC의 CIDR 블록)에 해당하는 접근은 local(VPC 내부)로 향한다는 뜻이다.

 

이제 여기서 인터넷 게이트웨이로 라우팅을 하면 된다.

 

라우팅 편집에 들어간다.

 

0.0.0.0/0과 만들었던 인터넷 게이트웨이를 추가하고 변경 사항을 저장하면 된다.

이 의미는 10.0.0.0/16 CIDR 블록을 제외한 접근에 대해서는 인터넷 게이트웨이로 라우팅 한다는 뜻이다.

 

서브넷도 연결해야한다.

 

만들었던 서브넷을 연결한다.

5. 보안 그룹 생성

 

EC2를 생성하기 전에 보안 그룹부터 생성하려고 한다.

 

보안 그룹은 인스턴스 레벨에서 트래픽을 제한하는 것이다.

 

즉 현재는 EC2 인스턴스에 대해서 트래픽을 제한하기 위해서 보안 그룹을 만드는 것이다.

 

물론 EC2를 생성할 때 보안 그룹을 생성하면 간편하게 만들 수 있지만 하나하나 직접 만들어보는 편이 aws를 익히는데 도움이 될 거라 생각한다.

 

EC2 -> 보안 그룹 -> 보안 그룹 생성에 들어간다.

 

보안 그룹 이름을 정하고 (역시 구분하기 쉽게 public을 붙여준다.) 우리가 만든 VPC를 선택해야한다.

 

처음에는 아마 Default VPC가 선택되어 있을텐데 삭제하고 우리가 만든 VPC를 선택한다.

이제 인바운드 규칙을 설정할 차례인데 인바운드 규칙은 "안으로 들어오는 트래픽"을 제한하는 것이다.

EC2 서버에 원격으로 접근하기 위한 SSH 연결은 보안을 위해 내 IP만 허용한다.

 

만약 팀으로 작업한다면 팀원들의 IP를 추가하면 된다.

 

HTTP와 HTTPS의 경우 모든 IP를 허용해주고 배포할 서버의 포트 번호의 IP 또한 모두 열어준다.

 

스프링 부트의 경우 default 포트가 8080번일 것이다.

 

직접 EC2에 서버를 배포하고 테스트해보지는 않고 RDS에 연결하는 것까지만 해 볼 예정이라 SSH 원격 연결만 설정해도 되지만 만약 서버를 배포하게 된다면 위와 같이 인바운드 규칙을 추가해줘야 한다.

 

아웃바운드 규칙은 인바운드 규칙과 반대로 "밖으로 나가는 트래픽"을 제한하는 것이다.

 

딱히 제한할 필요가 없으므로 모든 IP에 대해서 아웃바운드 트래픽을 허용한다.

 

이제 모든 준비가 끝났고 보안 그룹을 생성한다.

 

 

 

6. EC2 인스턴스 생성

 

이제 EC2를 생성해본다. EC2 -> 인스턴스 -> 인스턴스 시작에 들어간다.

 

원하는 이름을 작성한다.

AMI는 ubuntu 프리티어로 사용 가능한 것을 선택한다.

이제 키 페어를 생성하고 다운받은 파일을 잘 보관해둔다. EC2에 원격으로 접속할 때 사용할 예정이다.

이제 네트워크 설정에서 우리가 만든 보안 그룹을 연결할 차례이다.

그런데 보안 그룹 목록을 보면 우리가 만들었던 보안 그룹이 보이지 않는다.

 

이는 VPC가 default VPC로 자동 연결되어있기 때문이다. 편집 버튼을 눌러서 VPC를 변경해야한다.

 

여기서 VPC를 선택하고 우리가 만든 서브넷 (public subnet)을 선택하고 우리가 만든 보안 그룹도 선태한다.

다른 설정들은 그대로 두고 인스턴스를 생성한다.

실행될 때까지 기다린다.

7. EC2 인스턴스에 EIP 연결

EC2 -> 탄력적 IP (Elastic IP) -> 탄력적 IP 주소 할당에 들어간다.

 

따로 설정해줄 것은 없고 바로 할당한다.

만든 탄력적 IP를 선택하고 탄력적 IP 주소 연결을 누른다.

만든 EC2 인스턴스와 private IP 주소를 선택하고 연결한다.

탄력적 IP 주의사항!

탄력적 IP는 할당을 받아두고 연결하지 않는다면 요금이 부과됩니다.

탄력적 IP와 연결했던 EC2가 running 상태가 아니라면 탄력적 IP를 릴리스 해야만 요금이 부과되지 않습니다.

running 중인 EC2와 연결해둔다면 요금이 부과되지 않습니다.

 

8. SSH로 EC2에 접근

해당 EC2에 들어가서 연결을 누르면 연결하는 방법이 나와있다. 그대로 따라하면 된다.

우선 해당 키 페어 파일이 있는 곳에서 터미널 창을 연다. 나는 C 드라이브로 옮겨두었다.

 

나는 windows를 쓰고 있는데 git bash를 사용해서 터미널 창을 열었다.

 

chmod 400 posting-key-pair.pem 명령어를 입력한다.

chmod 400 posting-key-pair.pem

ssh -i ./"키 페어 파일 이름" ubuntu@IP 주소 명령어를 입력하고

ssh -i "posting-key-pair.pem" ubuntu@43.201.186.17

yes를 입력한다.

 

접속이 되었다. 이제 인터넷과 연결이 잘 되어있는지 확인할 차례이다.

 

다음 명령어는 공인 IP 주소를 확인하는 명령어이다. 공인 IP 주소가 출력된다면 인터넷에 연결되었다는 뜻이다.

curl http://checkip.amazonaws.com

 

다음 포스팅에서 RDS와 연동을 진행할 예정인데 이를 위해서 mysql도 설치를 해보자.

 

아래 명령어를 입력한다.

sudo apt-get update

아래 명령어를 입력해서 mysql을 설치한다. 

sudo apt-get install mysql-server

아마 아래와 같은 내용이 출력될 것이다. 용량을 확인하고 y를 입력한다.

설치가 잘 되었다면 인터넷과 잘 연결되어 있다는 뜻이다.

정리

  1. VPC를 생성한다.
  2. 인터넷 게이트웨이를 생성해서 VPC와 연결한다.
  3. 서브넷을 생성하고 보안 그룹으로 인바운드 규칙을 제한한다.
  4. 위의 서브넷의 라우팅 테이블을 생성하고 인터넷 게이트웨이로 라우팅한다.
  5. EC2 인스턴스를 생성하면서 키 페어도 생성해준다.
  6. 키 페어를 사용하여 EC2에 접근해보고 인터넷과 잘 연결되어 있는지 확인한다.

다음 포스팅에서는 private subnet에 RDS를 생성해서 EC2에서만 RDS에 접근할 수 있도록 해 볼 예정이다.

 

 

 

 

728x90
반응형

댓글