아래 그림에 따라 서버 구성해보기

1. vpc 생성하기
2. 서브넷 생성하기
3. 서브넷에 ec2 배치하기
4. 인터넷 gateway를 서브넷에 추가하기
5. 라우팅 테이블 생성하기
6. NAT 게이트웨이 설정하기
7. 프라이빗 서브넷에 ec2 배치하기
8. 가용영역 2개를 활용해서 vpc 구성하기
1번부터 실행하자
vpc를 생성하기

2. 서브넷 생성하기
public 서브넷 2개를 일단 생성하자

그리고 가용영역 b에도 마찬가지로 서브넷을 설정한다.
private 서브넷 4개도 마찬가지로 생성하자

10.1.3.0/24 부터 10.1.6.0/24까지 만들기
3. 서브넷에 ec2 배치하기
public 쪽에 bastion-server를 하나 만들자.
이건 예시라서 이렇게 한 것이고 bastion은 보안그룹 만들 떄, http 필요 없음
그냥 ssh만 연결하기
주소는 내 ip로만 가능하도록 허용하기!!


키페어도 하나 만들어서 저장해두자

vpc는 아까 만들어두었던 vpc에 연결하기.
퍼블릭 ip도 할당하자.

그런데 이렇게 인스턴스에 연결이 안된다고 뜰것이다.
이유는 인터넷 게이트웨이가 없기 때문이다.
이를 위해 인터넷 게이트웨이를 vpc에 붙이고
라우팅 테이블을 설정해줘야한다.
이 과정을 마치면

이렇게 잘 뜨고 ec2 접속도 잘 된다.
4. 인터넷 gateway를 vpc에 생성하고 붙이기

인터넷 게이트웨이를 vpc에 붙이고 라우팅 테이블을 만든다.


이렇게 모든 주소는 인터넷 게이트웨이로 나가도록
사설 ip 주소는 내부망으로 가도록 설정한다.
일단은 ssh로 연결해보자.

이제 개인 pc에서 접속을 시도해보자.
cmd 창을 키고 예시 문구를 입력한다.

이렇게 bastion 서버에 접속할 수가 있다.
해당 bastion 서버가 외부랑 연결 되는걸 보고 싶으면 일단 nginx를 깔아보자.
sudo apt update
sudo apt install nginx

이제 nginx를 이 안에서 실행해보자

nginx는 잘 뜨는데 이걸 ec2 public ip로 검색해도 잘 뜬다.
vi /etc/hostname
으로 주소가 아니라 bastion-host라고 뜨도록 한다.
sudo reboot로 재시작하면 된다.

이렇게 이름이 변경이 된다.
6. NAT 게이트웨이 설정하기

public 서브넷에 nat 게이트웨이를 넣을것이고, 탄력적 ip를 할당해준다.
그리고 생성 이후에는 라우팅 테이블을 만든다.
private 서브넷이 nat 게이트웨이로 가도록 해야한다. 사진과 달리 rds도 다 연결해주기!!

이렇게 private 서브넷을 nat로 가는 라우팅 테이블에 연결한다.

7. 프라이빗 서브넷에 ec2 배치하기

키를 새로 만들었다.

서브넷은 public a에다 설정, 보안규칙은 임시로 위처럼 구성
b에 들어갈 것도 이렇게 만들기.
8. ec2를 로드밸런서를 이용해서 연결하기.
private 서브넷에 넣은 ec2는 어떻게 접속해야할까. 아까 보안그룹으로 22번 ssh를 열어두었기에 여기로 접속해야한다.
먼저 bastion-server를 통해서 ec2를 들어가도록 하자

일단 키 보안사항을 바꾸자. 보안 때문에 하는 것임

이걸 아래 구문으로 옮기기
scp -i web-server.pem instagram-server.pem ubuntu@[EC2 인스턴스의 Public IP]:~/
우리 서비스로 할 경우에는 다음과 같이 입력
scp -i bastion-server.pem facebook-server.pem ubuntu@43.202.51.190:~/

이렇게 되면 파일이 이동이 된 것임 . bastion 에 들어가서 확인해보자

안에 잘 들어가있다.
이제 키 보안을 바꾸자

그리고 접속하면 된다.
이름도 바꾸면 된다.
9. Rds 서브넷에 넣기
rds는 서브넷 그룹 부터 만들자.

서브넷 그룹을 생성.
rds를 넣을 것이기에 2개의 서브넷 모두 선택

보안그룹을 만들자.
mysql로 만들기

아래처럼 생성

db를 설정한다.
admin
password로 일단 만들었다.

퍼블릭 액세스는 아니요로 하자.

생성된 rds에서 엔드포인트를 가져온다
facebookdb.cdom2ow44oku.ap-northeast-2.rds.amazonaws.com
이걸로 접속을 해보자.

접속을 시도해도 안 들어가진다.
왜냐하면 아까 퍼블릭 액세스를 막았기 때문이다.
ssh 터널링을 통해서 접속을 하도록 하자. 같은 vpc 내에서 접속이 되도록 해야함.

use ssh tunnel을 선택한다.
안에는 바스티온 서버의 public ip를 넣자. 키값도 넣어야함.
터널링 연결 성공하면 아래처럼 나옴

이제 시도하면 연결이 된다.

이렇게 db가 연결이 된다.

안에 스프링 서버를 띄우자.
서버는 다음 깃허브에서 pull 하자.
git clone https://github.com/JSCODE-COURSE/aws-vpc-springboot.git
GitHub - JSCODE-COURSE/aws-vpc-springboot: <비전공자도 이해할 수 있는 AWS 중급/실전> 中 예제 프로젝트
<비전공자도 이해할 수 있는 AWS 중급/실전> 中 예제 프로젝트. Contribute to JSCODE-COURSE/aws-vpc-springboot development by creating an account on GitHub.
github.com
cd src/main/resources에서
application.yml을 고치자.

sudo apt update
sudo apt install openjdk-17-jdk -y
로 jdk를 설치한다.
java -version # JDK가 잘 설치됐는 지 확인
./gradlew clean build -x test # 빌드하기
cd build/libs
sudo nohup java -jar aws-vpc-springboot-0.0.1-SNAPSHOT.jar &
curl localhost:80/health
curl localhost:80/boards # 게시글 조회 (+ 게시글 저장)
이제 로드 밸런서를 설정하자.

왼쪽걸로 한다.

로드 밸런서를 설정한다.

가용영역을 public subnet을 선택

로드 밸런서에 대한 보안그룹을 일단 만든다.

여기서 리스너 그룹이 있어야한다. 하나를 만들자

상태검사는 health로함

대상에서 ec2를 선택하고 포함시킨다.

이렇게 하고 postman에서 만들어진 dns를 넣는다



이렇게 로드밸런싱이 되는걸 볼 수 있다.

db도 잘 나온다.
보안 그룹 타이트하게 하기
1. 바스티온 서버로 접속하는건 ssh, 내 ip만
2. mysql db에 접속하는건 바스티온 보안 그룹이랑 ec2 보안 그룹만
3. ec2에 접속하는건 바스티온 ssh랑 로드 밸런서의 http 포트만 가능
4. elb는 80, 443만 들어오도록
위 과정 삭제 순서
elb
elb 그룹
ec2
rds
rds 서브넷 그룹
키 페어
nat
vpc
보안 그룹
탄력적 ip