개요
Postgresql을 AWS에서 사용하는 방법은 3가지가 있다.
1. EC instance에 postgresql을 설치해서 쓰는 방법 → 가장 저렴
2. AWS RDS for Postgresql
3. Aurora Postgresql
을 사용하는 방법이다.
구글링을 하면 Aurora가 RDS보다 비싸다는 글도 몇 있지만, 미국인 블로그를 보면 Aurora가 더 싸다는 글이 더 많은 듯하다.
대부분 그냥 Aurora를 사용하지만, RDS가 엔지니어가 수동으로 조절할 수 있는 부분을 전적으로 AWS에 맡기는 것이 싫어서 RDS를 쓰는 경우도 있다고 한다.
현재는 EC instance를 2개 생성하고 postgresql을 설치한 후 postgresql.conf와 pg_hba.conf를 수정하여
하나는 RW(master)로 사용하고,
하나는 RO(replica)로 사용 중에 있다.
이것을 Aurora Postgresql로 migration하려고 한다.
방법은 크게 나눠서 두 step
1. Aurora 생성한다. (이번 글)
2. Data를 이관한다. (다음 글)
EC2의 postgresql 버전 확인
현재 EC2에 설치되어있는 postgresql 버전을 확인.
ssh 접속해서
$ sudo su - postgres
$ psql
# SELECT version();
PostgreSQL 15.3 (Ubuntu 15.3-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, 64-bit
다행히 최신 버전을 사용 중이다. (물론 16버전 출시 소식이 들리긴하지만)
우선 migration하기 전에 Aurora database를 생성해야한다.
RDS > Subnet groups
Aurora를 생성하기 전에 AWS console에서 RDS 메뉴에서 > 좌측메뉴의 Subnet groups를 클릭.
이것이 가장 중요하다. 이 설정을 안 해줘서 하루를 통째로 날렸다.
(신규 아이디면 중요하지 않을듯한데, 이미 구성되어있는 인프라가 있을 때는 중요하다.)
AWS console에서 VPC 메뉴로 가서 > 좌측에 Your VPCs 라는 메뉴를 누르면 Resource map이 나온다.
이것을 참조해서 현재 VPC와 route table과 subnet가 어떻게 설정되어있는지 파악하는 것이 중요하다.
다시 RDS > Subnet gorups로 와서 > Create DB subnet group을 누르고
Aurora DB가 설치될 subnet을 설정한다.
Aurora 생성
AWS에 RDS 메뉴로 들어가 Create Database를 누른다.
Standard create 해야 설정이 더 많이 보인다. Easy-create하면 필요한 부분도 자동으로 생성된다.
Engine type은 Aurora (Postgresql)를 택한다.
Engine version은 현재 EC2에 설치되었으면서 최신 버전인 15.3을 택한다.
Template을 production으로 선택하면 더 좋은 HA(high availability)와 속도를 제공해주지만 개발용이므로 현재는 Dev/Test로 충분.
cluster이름은 사내 명명규칙에 따라서 짓는다.
Master username은 default가 postgres로 되어있지만 그래도 brute force attack을 대비하려면 다르게 바꿔주는 것이 더 좋을 듯 하다.
dev용 DB이므로 Aurora Standard로 선택
Serverless v2는 min과 max 사양을 정해놓으면 알아서 scale up과 scale down을 해주는 방식이나 migration이 좀 더 복잡할 것 같아서 instance type을 결정하는 provisioned 방식으로 r class를 선택하였다.
우선 large로 선택하고 추후 필요하면 xlarge로 scale up 할 예정.
위에서 Production 메뉴를 선택하면 "Don't create an Aurora Replica"라는 메뉴가 아예 나오지 않는다.
우리는 Dev 서버지만 RO(read only)가 필요하다. 그래서 Replica 생성.
EC2 instance를 생성하고 연결하는 방식도 있지만, 나는 없이 사용하는 것 선택.
위 그림의 가장 밑에 있는 DB subnet group이 내가 하루종일 삽질했던 이유.
이 글 맨 위에서 미리 설정해둔 DB subnet group을 선택해주면 아무 문제없다.
public access를 No로 하면 정해진 EC2에서만 접속이 가능하다. 우선 Yes로 선택하다.
Security Group은 중요한데, 5432 port를 열어주어야만 나중에 접속이 가능하다. 원래 DB에서 사용했던 security group을 재할당 해주었다.
username과 패스워드로 접속하는 것은 default로 가능하고, 위의 두 option은 추가로 가능한 authentication을 설정하는 부분이다. 설정이 복잡해지면 IAM role로 부여해주는 방법도 좋은 방법이다.
위 사항들은 나중에 설정할 수 있으므로 우선은 체크 해제
initail database name을 잘 지어준다.
백업은 0~30일까지 되는데 default인 7일이면 충분.
Encryption은 해제하고 시작.
Maintenance는 DB를 사용하지 않는 시간으로 수동 설정. 위의 UTC는 우리나라 시간이 아니니 주의.
Enable deletion protection을 선택을 하면, 실수로 원클릭으로 지우는 것을 방지할 수 있으므로 항상 체크. (혹시 지우고 싶을 때는 저거 해제해놓고 지울 수 있다.)
결국 instance type r6g.large로 2개 했는데, 예상비용은 위처럼 한 달에 276달러가 나온다.
똑같은 사양으로 RDS for Postgresql을 하면 400달러 쯤 나온다.
실제 청구되는 값은 I/O에 따라서 달라질 수 있지만 우선 Aurora가 RDS보다 싼 건 맞는듯.
=> Create database 버튼을 누르면 생성이 된다. 체감상 약 5분에서 10분쯤 걸리는 듯.
DB 접속
AWS console에서 RDS > 좌측메뉴 Databases를 누르면
db-x2bee-dev라는 cluster 안에
R/W instance와 R/O instance가 생성된 것을 확인할 수 있다.
R/W instance를 클릭하면 endpoint가 나온다.
무료 앱 중에 DBeaver도 좋고, pdAdmin 4도 좋은 것 같다.
둘 중 아무 앱으로 접속한다.
security group에 inbound rule에 5432 port를 열고, DB subnet group을 제대로 설정했다면
접속하는 데 문제 없을 것이다.
'DevOps와 Infra > AWS' 카테고리의 다른 글
MacOS에서 EC2에 있는 파일 가져오기 (0) | 2024.03.20 |
---|---|
Postgresql Migration (from EC2 to Aurora) - 3/3편 (0) | 2023.09.23 |
Postgresql Migration (from EC2 to Aurora) - 2/3편 (0) | 2023.09.21 |