EC2 & RDS 인스턴스 생성 및 연동

NCOOKIE·2023년 11월 29일
0

EC2

이전 글에서 생성해주었던 IAM 계정으로 로그인한다.

리전 설정하기

우측 상단의 계정 이름 옆에 있는 지역에서 서울을 선택한다.

인스턴스 생성

AWS 콘솔에서 EC2 서비스 페이지에서 인스턴스 시작 버튼을 클릭한다.

이름은 임의로 기입한다. 여기서 OS 이미지는 Amazon Linux를 선택했지만 취향에 따라 우분투나 레드햇을 골라도 된다. AMI는 프리티어 사용가능한 것으로 선택했다.

인스턴스 유형도 마찬가지로 프리티어가 적용되는 것으로 설정했다.

프리티어에서는 인스턴스 용량을 최대 30GB까지 사용할 수 있다. 만약 여러 개의 인스턴스를 사용할 예정이라면 적당히 분할해서 할당해줘야 한다.

키 페어

나중에 putty 같은 프로그램으로 EC2 ssh에 접속하기 위해서 필요한 키 페어를 생성해서 다운로드 한다. 이 파일은 잘 보관해두어야 한다.

putty 프로그램을 사용하여 ssh에 접속할 것이기 때문에 ppk를 선택한다. pem 파일을 다운로드 받아도 putty에서 변환시킬 수 있긴하다.

추가 설정

혹시 모를 상황을 대비해 인보이스와 결제 알림 등을 메일로 받을 수 있도록 설정해주었다.

인스턴스 설정

탄력적 IP 주소

AWS의 EC2는 재실행 될 때마다 pulic IP가 할당된다. 이를 고정으로 사용하기 위해 탄력적 IP(EIP, Elastic IP)를 설정해준다.

탄력적 IP 주소 할당을 해주고 인스턴스와 연결해주지 않으면 비용이 청구될 수 있다. 만들어두었던 EC2 인스턴스를 할당해주자.

EC2 인스턴스 정보를 보면 퍼블릭 IPv4 주소와 탄력적 IP 주소에 위에서 설정한 EIP 주소가 할당된 것을 확인할 수 있다.

EC2 서버 접속

서버에 접속하는 방법은 여러 가지가 있다.

AWS 콘솔

AWS 콘솔에서도 EC2 서버에 연결해서 명령어를 입력하여 간단한 동작을 수행할 수 있다.

putty

Connection - SSH - Auth에서 아까 다운로드 받았던 ppk 파일의 경로를 설정한다.

이후 Session 탭에서 호스트 이름과 포트를 기입한다. 해당 세션 정보를 저장하려면 Save하고, 다음에 Load로 다시 설정을 불러올 수 있다.

호스트 이름은 "{사용자 이름}@{pulic IP 주소}"으로 입력한다. AWS에서 별다른 설정을 하지 않았다면 AMI에 정의된 사용자 이름은 "ec2-user"이다. 포트 번호는 22번이다.

만약 Putty Fatal Error : NO supported authentication methods available ... 에러가 발생했다면 호스트 이름에 퍼블릭 IPv4 DNS 값을 넣어준다.

이 외에도 계속 연결에 실패한다면 Auth에서 ppk 파일 경로가 설정되어 있는지 다시 확인해보자. putty 프로그램을 실행할 때마다 초기화되기 때문에 주의해야 한다.

EC2 기본 설정

timezone

기본 서버 시간은 미국으로 설정되어 있기 때문에 한국 기준으로 변경해준다.

sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

이후 date 명령어로 현지 시간이 잘 적용되었는지 확인한다.

[ec2-user@ip-172-31-42-234 ~]$ sudo rm /etc/localtime
[ec2-user@ip-172-31-42-234 ~]$ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
[ec2-user@ip-172-31-42-234 ~]$ date
Thu Nov 30 14:50:53 KST 2023

자바 설치

각자 사용하는 언어의 SDK나 라이브러리 등의 의존성을 설치한다. 나는 여러 자바 버전 중 temurin 17 버전을 사용한다.

apt-get install temurin-17-jdk

MySQL 설치

다른 OS라면 아래 명령어 중 하나를 사용하면 정상적으로 설치될 것이다.

sudo apt-get install mysql
sudo yum install mysql

그러나 이번 EC2 인스턴스 생성 시 사용한 Amazon Linux 2023 버전은 저장소에 MySQL을 포함하지 않고 있는 것 같다. 때문에 링크에서 직접 파일을 받아와 설치를 진행해야 한다.

sudo su -
dnf -y localinstall https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm
dnf -y install mysql mysql-community-client

RDS

인스턴스 생성

RDS 페이지에서 데이터베이스 생성 버튼을 클릭한다.

엔진 옵션

상세 옵션을 설정해줄 것이므로 표준 생성을 선택하고, MySQL을 사용하려고 한다. MySQL의 버전은 각자의 사정에 맞게 세팅하면 된다.

템플릿

템플릿은 당연히 프리 티어를 골라야 한다.

설정

마스터 사용자 이름과 비밀번호는 꼭 기록해두자.

인스턴스 구성

db.t3.micro도 프리티어에서 사용 가능하다.

스토리지

프리티어의 경우 RDS 스토리지의 용량은 20GB까지 사용할 수 있다. 스토리지 자동 조정을 활성화하면 최대 100%까지 무료 백업 스토리지를 제공한다고 하지만 만약의 경우를 대비하여 비활성화 시켜두려고 한다. 추후 추가 용량이 필요하게 된다면 해당 부분을 검토해봐야 한다. (https://aws.amazon.com/ko/rds/free/ 참고)

연결

EC2 컴퓨팅 리소스에 연결을 선택하면 퍼블릭 액세스를 활성화하지 못하므로 EC2 컴퓨팅 리소스에 연결 안 함을 선택해준다. 나중에 VPC 설정을 통해서 EC2에서 RDS에 접속할 수 있도록 설정할 수 있다.

  • VPC / 서브넷그룹
    VPC가 구성되어 있다면 선택해주고, Default를 사용해도 무방하다.
  • 퍼블릭 액세스 가능
    Public IP를 할당하여 VPC 외부에서 DB 인스턴스 접근을 허용할 것인지 체크한다. 로컬에서 MySQL 워크벤치나 IntelliJ의 툴을 사용하여 RDS에 접속할 수 있게 한다.
  • VPC 보안 그룹
    인/아웃바운드 규칙이 정의된 보안 그룹을 선택한다. 뒤에서 EC2와 연동하면서 자동으로 보안그룹이 생성될 것이기 때문에 따로 추가하지는 않는다.
  • 가용영역
    서울 Region에는 ap-northeast-2a, ap-northeast-2c 두 개의 가용영역(AZ)이 존재한다. EC2와 연동하기 위해서 EC2와 동일한 가용영역을 선택해주자.
  • 포트
    MySQL 기본 포트인 3306을 사용한다.

프록시는 이번에 처음 보는 설정인데, 필요하게 되면 나중에 다루어보도록 하겠다.

추가 구성

기타 필요에 따라 옵션을 선택한다. 기본값을 사용해도 무방하다.

월별 추정 요금

청구 예상 비용이 적혀있긴 하지만 프리티어 기준에 부합하기만 한다면 요금이 청구되지는 않을 것이다. 만약 프리티어 기간이 끝나도 계속 해당 인스턴스를 유지한다면 이야기가 달라지겠지만...

추가 기능

최근에 생긴 옵션 같은데, EC2가 아니라 AWS 자체에서 캐시 DB를 지원하는 것 같다. 프로젝트에서 RDS를 사용할 예정이니 그 때가 되면 다시 다루어보도록 하겠다.

https://velog.io/@hwsa1004/AWS-%ED%94%84%EB%A6%AC%ED%8B%B0%EC%96%B4-ElastiCache-%EC%83%9D%EC%84%B1%EB%B6%80%ED%84%B0-%EC%A0%81%EC%9A%A9%EA%B9%8C%EC%A7%80 참고

파라미터 그룹

파라미터 그룹 설정

RDS에서 파라미터 그룹은 하나 이상의 DB 인스턴스에 적용되는 옵션을 지정할 수 있는 기능이다. 여기서는 timezone, 인코딩 등의 설정해줄 것이다.

사용 중인 DB 버전에 맞게 패밀리 선택해주고 이름은 임의로 지정한다.

파라미터 그룹 편집

아래의 값들을 검색하여 값을 설정해주자.

RDS 수정

데이터베이스 - 인스턴스 선택 및 수정

연동

인바운드 규칙

EC2에서 RDS에 접속하기 위해서 인바운드 규칙을 수정해줘야 한다. 인바운드 규칙을 통해 서버에 들어오는 포트를 제한할 수 있다.

EC2,RDS 보안그룹 설정

하나의 보안 그룹에 EC2와 RDS를 넣어서 접근이 가능하게 할 수도 있지만, AWS에서 제공하는 기능을 사용하여 설정할 수도 있다. RDS 인스턴스를 선택하고 EC2 연결 설정을 클릭하자.

기존에 생성해두었던 EC2 인스턴스를 선택해주고

설정 완료를 해주면

RDS에는 rds-ec2-1, EC2에는 ec2-rds-1 보안 그룹이 저장된 것을 확인할 수 있다.

RDS 접속

EC2에서 접속

위에서 EC2에 정상적으로 mysql을 설치했다면 다음과 같은 명령어를 입력할 수 있다.

mysql -u [사용자 이름] -p -h [엔드포인트]

사용자 이름은 RDS 데이터베이스 생성 시 입력했던 이름이고, 엔드포인트는 데이터베이스 상세 정보에서 확인할 수 있다.

비밀번호까지 잘 입력했다면 아래와 같은 화면을 볼 수 있을 것이다.

IntelliJ Database Tool에서 접속

IntelliJ 내부에서 제공하는 Database Tool을 사용해서 RDS 데이터베이스에 접근할 수 있다. 개발할 때 유용하게 사용하고 있다.

Database 탭에서 Data Source - MySQL을 선택한다.

  • Name : Data Source 이름. 구분하기 편한 이름 입력해주자.
  • Host : 위에서도 사용했던 엔드포인트 값을 넣어주면 된다.
  • User : 사용자 이름
  • Password : 비밀번호
  • Database : 사용할 데이터베이스 이름. 나는 EC2에서 접근해서 imad라는 데이터베이스를 SQL 구문으로 생성해준 상태이다.

Host 내용을 채워넣으면 URL은 자동으로 완성된다. 이렇게 설정을 저장하고 Test Connection 버튼을 누르면,

에러가 뜬다. 이 부분은 이전에도 블로그 글로 올렸었다.

RDS 데이터베이스가 속해있는 보안 그룹의 인바운드 규칙을 편집한다. 유형은 MySQL/Aurora, 소스는 내 IP로 제한한다. 만약 집 이외에 카페 같은 장소에서 작업을 하려고 하면 그곳의 IP 주소도 추가해줘야 로컬 컴퓨터에서 접근할 수 있다. 나는 데스크탑으로 집에서만 작업하니 집의 IP 주소만 설정해주었다.

이제 다시 Test Connection 해보면 잘 된다.

만약 여기까지 했는데도 실패한다면 라우팅 테이블도 수정해야 한다.

VPC - 라우팅 테이블에서 RDS가 사용하고 있는 테이블 선택 후, 작업 - 라우팅 편집을 눌러주자.

여기서 라우팅 추가를 하여 인터넷 게이트웨이를 클릭한다. 그러면 자동으로 완성되는 항목을 선택 후 저장하면 연결이 잘 되는 것을 확인할 수 있다!

IntelliJ의 화면에서도 잘 연동된 것을 확인할 수 있다.

참고

profile
일단 해보자

0개의 댓글