이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
✅ 서론
AWS는 새로 가입을 하면 1년동안 프리티어로 사용할 수 있다.
AWS에서 제공하는 서비스 중, EC2라는 서비스를 통해 백엔드 서버, 웹 어플리케이션 등을 실행할 수 있는데,
토이 프로젝트를 할 때에 이 EC2 서비스를 많이 이용하게 된다.
프리티어 수준에서 사용이 가능한 EC2 인스턴스를 직접 생성하고, EIP(Elastic IP; 탄력적 IP)를 해당 인스턴스에 적용해보자.
그리고 프리티어 수준에서 사용한 가상 서버의 유형은 보통 `t2.micro` 정도가 되는데, 서버의 사양이 그리 좋지 못해서 간간히 뻗는 경우가 발생한다.
이를 완전히 해결하긴 어렵지만, swap memory를 적용하여 완화하는 방법도 같이 알아보자.
✅ EC2 Instance 생성하기
1. 우선 AWS에 로그인을 하고 EC2 서비스에 접속 후, `인스턴스 시작`버튼을 누른다.
2. 인스턴스 생성에 필요한 정보들을 설정한다.
1) `이름 및 태그`: 이름은 본인이 사용하고자하는 이름으로 설정한다. EC2 생성 이후에도 변경이 가능하므로 마음 놓고 적어준다.
2) `애플리케이션 및 OS 이미지`: 사용하고자하는 OS를 설정해주면 된다. 나는 Ubuntu가 익숙하여 Ubuntu로 설정하였다.
3) `인스턴스 유형`: 프리 티어 수준에서 사용하고자 한다면 오른쪽에 `프리 티어 사용 가능`인 목록들 중에서 하나를 선택해야 한다. 그렇지 않으면 요금이 부과될 수 있으니 유의하자.
4) `키 페어(로그인)`: 해당 값을 사용하면 SSH 혹은 putty를 통해 인스턴스에 연결할 때 `키 페어`가 있어야만 접속이 가능하게 할 수 있다. 보안을 위해 반드시 설정하자.
키 페어를 새로 생성하고자 한다면, 오른쪽에 `새 키 페어 생성`을 눌러 생성하자.
`키 페어 이름`에는 본인이 사용하고자하는 이름을 작성하고 `키 페어 생성` 버튼을 누르면, 키 페어가 생성되며 .pem 파일을 안전한 곳에 잘 받아놓자.
5) `네트워크 설정`
여기에서는 보안그룹(방화벽)을 설정하는 곳이다.
여기에서 설정한 트래픽만 EC2에 접근하도록 허용함으로서, 트래픽을 세부적으로 제어할 수 있다.
보안그룹을 생성해보자.
`EC2 서비스` - `네트워크 및 보안` - `보안 그룹` - `보안 그룹 생성`을 누른다.
💡 보안 그룹은 개발 환경에 따라 열어주어야 할 포트 번호가 달라집니다!
데이터베이스가 사용하는 포트 번호가 무엇이냐, HTTP & HTTPS를 사용하냐에 따라 달라집니다.
GitGet 서비스는 데이터베이스로 `mariadb(port 3306)`, `mongodb(port 27017)`를 사용하고 있고,
`HTTP(port 80)`에 이어서 `HTTPS(port 443)`도 적용할 예정이기 때문에, 포트를 밑과 같이 오픈해주었습니다.
또한 EC2에 접속하기 위해서는 `SSH(port 22)`를 열어주어야 합니다.
각자의 환경에 맞게 설정해주세요 :)
6) `스토리지 구성`
프리 티어에서는 총 30GB의 루트 볼륨을 무료로 제공한다. 30GB 이내로 원하는 만큼 설정하면 된다.
이후 `인스턴스 시작` 버튼을 누르면 인스턴스가 생성되어 목록에서 확인할 수 있다 :)
✅ EIP(Elasitc IP; 탄력적 IP) 적용하기
인스턴스가 정상적으로 실행되어 접속할 수 있게 되었다.
그런데 한 가지 문제가 있다.
인스턴스 목록에서 우리가 만든 인스턴스를 클릭하면 `퍼블릭 IPv4 주소`를 확인할 수 있는데,
문제는 `인스턴스 중지` 이후 `인스턴스 시작`을 눌렀을 때, 이 `퍼블릭 IPv4 주소`가 바뀐다는 것이다.
만일 FE에서 이 `퍼블릭 IPv4 주소`를 통해 API를 요청한다면, 인스턴스가 모종의 이유로 중지되었다가 재시작되었을 때마다 API 주소를 바꿔야한다는 큰 문제점이 있다.
이러한 점을 보완할 수 있는 방법 중 하나는 `EIP(Elastic IP; 탄력적 IP)`를 사용하는 것이다.
우선 `EC2 서비스` - `네트워크 및 보안` - `탄력적 IP`에 들어가 오른쪽 상단의 `탄력적 IP 주소 할당`을 눌러 탄력적 IP를 생성한다.
이후에 생성된 EIP 목록에서 생성한 EIP 주소를 선택하고 `작업` - `탄력적 IP 주소 연결`을 누른다.
인스턴스란에서 연결하고자하는 인스턴스를 선택한 후 연결 버튼을 누른다.
완료된 후 EC2 인스턴스 목록 페이지에 들어가면 해당 인스턴스에 EIP가 적용되어 있음을 확인할 수 있다.
EIP를 사용하고자할 때 제일 고민되는 이유는 바로 요금 때문인데,
`EC2용 AWS 프리 티어에는 2024년 2월 1일부터 처음 12개월 동안 매월 750시간의 퍼블릭 IPv4 주소 사용이 포함`된다고 한다.
자세한 사항은 밑의 두 링크를 참고하길 바란다 :)
https://repost.aws/ko/knowledge-center/elastic-ip-charges
https://aws.amazon.com/ko/blogs/korea/new-aws-public-ipv4-address-charge-public-ip-insights/
✅ swap memory 적용하기
마지막으로 프리티어 수준에서 생성한 인스턴스를 쓸만한 수준으로 올리기 위해 `swap memory`를 설정해보자.
`$` 옆의 명령어를 하나씩 작성해주면 된다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
16+0 records in
16+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 31.0286 s, 69.2 MB/s
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=55b06df3-58ce-453f-ab59-d9e110f6679d
$ sudo swapon /swapfile
$ sudo swapon -s
Filename Type Size Used Priority
/swapfile file 2097148 0 -2
$ sudo vi /etc/fstab
$ free
total used free shared buff/cache available
Mem: 980436 352776 189468 880 599752 627660
Swap: 2097148 0 2097148
✅ 참고 자료 & 링크
http://diary-developer.tistory.com/32