AWS PostgreSQL 접속 - AWS PostgreSQL jeobsog

postgresql 설치.

EC2에 접근하였으니, 이제 postgresql를 설치

sudo amazon-linux-extras install postgresql10 epel -y sudo yum install postgresql-server postgresql-devel -y /usr/bin/postgres --version ㄴ 버전확인 sudo /usr/bin/postgresql-setup --initdb

postgresql 설정파일 수정하기.

권한때문에 root 유저로 접근

postgresql.conf를 수정해줘야한다.

$ sudo su # vi /var/lib/pgsql/data/postgresql.conf


postgresql.conf 파일은 아래와 같이 수정한다.

listen_addresses와 port의 주석만 풀어주면 된다.

설정값 변경이 있었으니 작업한 내용을 적용하려면 서비스 재시작을 해줘야 한다.

# sudo service postgresql restart

postgresql 계정 추가하기.

계정을 추가해주는 작업을 진행
pg_hba.conf은 postgresql에 접속하는 클라이언트에 대한 인증 설정하는 곳
계정을 추가

# vi /var/lib/pgsql/data/pg_hba.conf

설정을 변경했으니까 서비스 재시작

# sudo service postgresql restart

postgresql 접속

postgres는 기본적으로 설치되면 사용자명으로 postgres가 사용되기 때문에 postgres로 유저를 변경해준 다음 postgresql에 접속한다.

# sudo su - postgres $ psql


이제 postgresql에서 내가 사용할 유저를 만들어주고, 데이터베이스를 하나 만들어준다.

그럼 설정 끝

# CREATE USER ['유저명'] NOSUPERUSER; # ALTER USER ['유저명'] WITH PASSWORD ['사용할 패스워드']; # CREATE DATABASE ['데이터베이스명'] WITH OWNER ['유저명'];

후... 추가적으로 PGADMIN으로 데이터베이스를 접속해보려고 시도했는데

계속 timeout 에러가 났다.

왤까?

EC2에 보안그룹에 인바운드 규칙에 postgres 포트를 열어주지 않아서

접근이 안되었다.

인바운드 규칙에 postgres 포트 5432를 추가해주면 정상적으로 pgadmin에 접근하는것을 볼 수 있다.

AWS 사이트에 너무 친절하게 설명되어 있지만

실제로 연동하면서 생기는 문제 때문에 게시글을 남긴다.

1. DB 인스턴스의 엔드포인트와 포트 번호를 찾는다.

 - 엔드포인드가 Host에 들어가고, 포트 번호는 port에 들어간다.

2. DB 생성 시 정해놓았던 사용자 이름과 암호를 각각 username과 password에 넣는다.

하지만 필자의 경우 아래와 같은 에러가 발생했다.

could not connect to server: Connection timed out

처음에는 보안규칙에 인바운드 아웃바운드 설정을 정확히 안해준건지 생각이 들어서 봤지만

아니였다.

구글링 끝에 퍼블릭 액세스 설정을 해주지 않아서

DBMS로 접근했을때 접근을 막고 있었던 것이였다. ㅠㅠ

추가 연결 구성 부분이 접혀 있어서 데이터베이스 생성 시 

확인하지 못했던 것이다.

사이드 프로젝트에서 DynamoDB를 RDS로 옮기자는 의견이 있어서 AWS RDS DB 인스턴스를 생성하고 외부에서 접근하는 방법까지 정리하려고 합니다. AWS 정리글은 뭔가 개발이 아니라 회사가 배포한 모듈을 리뷰하는 느낌이라 지양하려 하지만 EC2, Lambda, RDS는 워낙 AWS의 근본 서비스라 생각해 작성하기로 결정했습니다.

RDS란?

RDS는 AWS가 지원하는 클라우드 RDBMS 서비스로 No-SQL에 DynamoDB가 있다면 SQL은 RDS가 있다 정도로 이해하면 된다. 비용정책은 사용량으로 책정되는 DynamoDB와는 달리 EC2처럼 활성화 시간으로 부과하고 있다.

RDS 데이터베이스 생성

엔진 선택

먼저 RDS는 여러 종류의 엔진 옵션을 제공한다. 많은 사람들이 MySQL을 사용하나 이번에는 속도는 조금 느리더라도 관리가 편한 PostgreSQL을 사용하기로 했다. 아래 그림처럼 엔진을 선택하고 넘어가자.

템플릿 설정

프리티어가 아니면 생각보다 프로비저닝 유닛이 커서 예상 부과 금액이 상당히 올라감을 볼 수 있다. 실 서비스가 아니라 어디까지나 사이드 프로젝트이므로 프리티어를 선택했다.

데이터베이스 설정

데이터베이스 이름을 설정한 뒤 해당 DB의 유저네임, 암호를 작성한다. 이후 유저네이모가 비밀번호는 외부에서 RDS DB 인스턴스에 접근할 때 필요하므로 반드시 기억해둔다.

연결 설정

AWS의 모든 인스턴스는 내부던 외부던 상호작용을 위해 VPC를 설정한다. 이 경우 기존에 생성되어 있던 기본 VPC를 선택하였고 외부에서도 접근이 가능하게끔 설정하기로 했으므로 퍼블릭 액세스 가능 여부도 체크해준다.

데이터베이스 인증

외부에서 DB에 접근하고자 할 때 인증을 어떻게 할 것인지 옵션을 선택해야 한다. 2, 3번 옵션이 안전하겠지만 현업이 아니고 단순 생성 목적이기에 암호인증으로 결정했다.

이 과정을 모두 마치면 새로운 RDS DB 인스턴스가 생성되었음을 확인할 수 있다.

RDS DB와의 외부 연결

인바운드 규칙 편집

외부에서 RDS DB 인스턴스로 접근하기 위해 인바운드 규칙을 정의해야 한다. AWS Consol에서는 자신의 IP를 등록하게끔 할 수 있으며 추가하는 규칙의 유형에 PostgreSQL을 선택하면 포트까지 자동으로 설정해준다.

PostgreSQL 설치

로컬 머신에 PostgreSQL을 설치하지 않았다면 설치를 진행한다. 각자의 로컬머신 시스템 환경에 적당히 맞춰서 다운로드한 뒤 실행한다.

포트는 기본적으로 5432포트로 지정되어 있다. AWS의 인바운드 규칙도 해당포트로 설정해뒀기에 그대로 둔다.

설치 이후 RDS DB 인스턴스로의 연결을 위해 PostgreSQL 에디터를 열어야 한다. 개발자는 CLI 환경에서 작업해야 간지가 난다고들 하지만 지원이 잘 되어 있는 GUI 환경이 존재한다면 굳이 거절할 필요는 없다. 프로그램 이름은 pgAdmin이다. PostgreSQL 설치 시 함께 진행할 수 있으므로 검색 후 실행한다.

로컬머신에서 AWS RDS DB 연결

pgAdmin을 실행하면 좌측 상단에 서버 목록이 보인다. 여기에 우클릭 - Create - Server...를 선택해 연결할 DB 인스턴스 정보를 입력한다.

먼저 표시할 DB 이름을 작성한 뒤 [Connection] 탭에 가서 RDS DB 인스턴스의 Endpoint url을 채워 넣는다. 하단에 [Username]과 [Password] 항목에 이전 RDS DB 인스턴스 생성 시 입력했던 유저네임과 암호를 기억해내서 작성한다.

Toplist

최신 우편물

태그