전에 만들었던 CRUD 사이트를 AWS에 올리려는 중이다.
Express, MySQL, Redis로 이루어져 있는 백엔드인데,
@vendia/serverless-express로 lambda, API Gateway로 변환하고,
MySQL은 RDS로, 그리고 Redis는 ElastiCache를 사용하기로 하였다.
AWS EC2
EC2는 Elastic Compute Cloud의 약어로 Virtual Computing environment를 제공한다. 컨테이너 기반으로 리눅스 등의 가상 환경을 구축할 수 있다.
API Gateway
API Gateway는 어플리케이션과 내부 microservice사이에 존재하는 인터페이스로, API 구축과 관리를 간편하게 하고 엔드포인트를 노출하지 않아 보안에서도 강점을 보인다.
Lambda function
람다는 AWS의 서버리스 컴퓨팅 서비스다. 사용자가 서버를 관리할 필요없이 코드가 실행되었을떄의 시간과 용량에 대해서만 비용을 지불하면 된다.
API Gateway가 특정 엔드포인트에 도달했을때, Lambda 함수를 실행할 수 있게 연결할 수 있다. 이외에도 특정 이벤트가 트리거되었을때 등에도 Lambda 함수를 실행하도록 할 수 있다.
로컬 데이터베이스를 RDS로 옮기기
사실 이거 하느라 오늘 하루종일 삽질했다.
우선 로컬 데이터베이스를 백업하고,
EC2 인스턴스에 이 백업 파일을 옮기고,
EC2 측에서 다시 받은 백업 파일을 RDS에 옮기는 방식을 사용했다.
우선
mysqldump -u [아이디] -p [데이터베이스] > [백업받을 테이블명].sql
를 통해서 sql파일을 생성한다.
이후 EC2 인스턴스를 만들고(나같은 경우 프리티어 우분투 18.0.2를 사용함)
SSH, SCP를 통해서 EC2로 sql 파일을 전송한다.
openSSH의 기본 설치경로는 C:\Windows\System32\OpenSSH고, 설치되어있지 않은 경우에는 Window 설정/앱/선택적 기능/OpenSSH로 설치하여야한다.
ssh -i [발급받은 pem 키 위치] ubuntu@ec[] 를 통해서 EC2 인스턴스에 원격으로 접근할수 있다.
WARNING: UNPROTECTED PRIVATE KEY FILE!<br>Permissions for '파일이름.pem' are too open. It is required that your private key files are NOT accessible by others.
같은 에러가 떴다.
이는
https://techsoda.net/windows10-pem-file-permission-settings/
참조
Permission denied (publickey).
라는 에러가 떴었는데, 이는 서버측의 key에 사용자가 접속하려는 키값이 없기 떄문에 발생하는 에러다.
cli에서 ssh-keygen -y -f [pem 키 위치]를 통해
ssh-rsa AAAAB3NzaC1yc2EAAAA[--중략--]NrRFi9wrf+M7Q==
이런 형식의 키를 발급받을수 있는데,
인스턴스 측의 /.ssh/authorized_keys/에 넣어줘야한다.
Scp –i [pem키] [파일] [사용자명]@ec-2~.com:[경로] 를 통해서 이제 파일을 보낼 수 있는데, 꼭 관리자 권한이어야한다!
이거 깜빡해서 1시간 씨름했다.
그리고 EC2 우분투 측에서 mysql를 설치해야한다.
나의 경우는 8를 사용중이었느데
https://hyunmin1906.tistory.com/265
참고하여 설치하자.
이후 EC2에서 RDS 접근하기 위해서는 보안그룹을 수정해야한다.
RDS의 데이터베이스란에서 보안그룹에 들어가, 인바운드 규칙을 수정한다.
‘EC2’의 보안 규칙에 있는 인스턴스의 보안규칙 아이디를 인바운드 규칙의 MYSQL/AURORA에 추가해주어야한다.

후에 sudo mysql -u [RDS 사용자명] -p –database=[데이터베이스명] –host=[RDS엔드포인트명] < [백업파일명].sql 를 통해서 RDS에 옮길수 있다.
지금은 필요한만큼만 AWS를 한정적으로 사용하는 느낌인데, 추후에는 아예 깊게 공부해볼 필요가 있을거같다.
'TIL' 카테고리의 다른 글
| TIL 2022-01-06 NextJs API, Typescript 제네릭 함수, git ignore 적용 (0) | 2022.01.07 |
|---|---|
| TIL 2022-01-04 AWS Lambda와 Express Serverless로 변환 (0) | 2022.01.05 |
| TIL 2021-12-29 Github Action Release, __dirname is not defined (0) | 2021.12.29 |
| TIL 2021-12-28 Github-action, Cron (0) | 2021.12.29 |
| TIL 2021-12-28 SSR 구현,RTK-Query, 프그머 추석 트래픽 (0) | 2021.12.28 |
