React 기반으로 작성된 Front 를 Build 하여 S3 bucket
에 업로드 한다.
Bucket
의 속성에서 정적 웹 사이트 호스팅 편집
정적 웹 사이트 호스팅 설정, 리액트의 인덱스 문서 index.html 지정 등
Bucket 의 접속 정책 생성
ERR_OSSL_EVP_UNSUPPORTED
해당 에러는 모듈 중 하나 혹은 일부가 Node 17.x 부터 적용된 OpenSSL 3 버전의 규격에 맞지 않을 경우 발행 할 수 있다.
최하단을 보면 Node.js v18.15.0 으로 자신의 Node 버전을 확인 할 수 있다.
해결 방안
필자가 사용한 방법으로 다음 명령어를 사용하였다
npm audit fix --force
모듈의 버전업으로 문제를 해결하는데 어떤 모듈의 버전인지 확인하기 어렵고 번거롭기 때문이다. 문제된 모듈은 react-scripts 2.0.1 이었으며 업그레이드 후 문제가 해결되었다
react-scripts --openssl-legacy-provider start
출처: https://ongamedev.tistory.com/484
dotenv 모듈에서 사용하는 fs 를 못찾는다는데
react 는 기본 dotenv 를 내장하고 있는데 내장 dotenv 를 찾는게 아니라 직접 dotenv 를 끌고오는 코드가 있어서 상단
import dotenv from "dotenv"
dotenv.config()
또는
require('dotenv').config();
삭제해준다
git
sudo apt-get install git
node
sudo apt-get install nodejs
npm
sudo apt-get install npm
nohup 사용
sudo npm install pm2 -g
pm2 --name HelloWorld start npm --start
pm2 ps
pm2 delete 0
pm2 logs
서버 세팅 완료
클라이언트와 서버가 연결된 모습
ec2 는 기존에 사용하던 머신이 아닌 새로운 가상 컴퓨터 이므로 등록을 다시 해줘야한다.
ssh-keygen -b 4096 -C "[github 이름] [github 이메일]"
~/.ssh/id_rsa.pub
의 내용을 붙여 쓴다
다른 방법으로 http 로 clone
git clone https://github.com/cs-devops-bootcamp/sprint-aws.git
입력 시 username 과 password 입력을 요구한다 여기서 password 에 Repository Read Token 을 입력해준다
server code 확인시
포트 번호를 80번으로 사용하는데 실행시키면
Error: listen EACCES: permission denied 0.0.0.0:80
에러가 발생 해당 에러는
1024 이하 포트 번호 즉, well knows port 를 사용하려면 root 권한이 필요하고 node 는 해당 80번 포트에 대한 접근권한이 없다는 의미이다
해결 방안
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -F
iptables -X
iptables -L
- 기본 조회 , iptables -L -v
- 상세조회sudo iptables -t nat -L --line-numbers
sudo iptalbes -t nat -D PREROUTING [number]
sudo iptables -t nat -D PREROUTING 1
퍼블릭 액세스는 나중에라도 꼭 차단을 하길 바란다.
VPC Peering이란 서로 다른 VPC간 통신이 가능하도록 연결하는 것을 말합니다. 서비스 구분이나 관리 목적에 따라 VPC 를 구분해 놓았을 때 VPC 간 통신이 필요할 때 사용합니다
여기서는 EC2 - RDS 간의 VPC 를 따로 두고 RDS 의 퍼블릭 액세스를 차단하기 위함입니다
이렇게 하였을 때 RDS 는 연결된 VPC 안 EC2 인스턴스를 통해서만 액세스 가능해지고 다른 VPC 를 가진 서비스에서도 VPC Peering 을 통해 Database 에 접근이 가능할 수 있도록 구성이 가능해 집니다.
192.168.10.0/24
대역과 192.168.10.0/16
대역을 갖고 있는 VPC 간에는 Peering 자체가 불가능하다VPC Peering 은 각각 다른 VPC 와 다른 CIDR 대역간의 연결을 위해 사용한다.
VPC A(요청자) - VPC B(수락자) 를 연결하여 통신이 가능하게끔 만듭니다
A 와 B 가 바뀌어도 상관없지만, 수락자의 계정 또는 리전에서 요청을 수락하여야 VPC Peering 이 완료됩니다.
VPC Peering 을 생성해 VPC 간 네트워크 연결할 준비는 끝마쳤다.
이제 VPC Peering 을 사용하여 두 VPC 간의 연결을 하기 위해 Route Table 을 설정해줘야 한다.
EC2 인스턴스의 라우팅 테이블의 정보이다
0.0.0.0/0
- igw-0d28...
: 인터넷 게이트웨이와 연결되어 인터넷을 사용가능하게 라우팅 된것172.31.0.0/16
- local
: local 연결이다이제 여기에 대상 VPC 의 CIDR 과 VPC ID 를 연결하고 서브넷 연결 또한 명시해주면 VPC 간의 통신이 이루어진다.
EC2 에서 RDS 로의 데이터 요청이므로 RDS 쪽에만 라우팅해주면 된다.
양방향 통신의 경우 양쪽다 설정해주면 된다.
RDS 는 당연히 보안그룹에서 인바운드 규칙으로 허용해주어야 한다.