Amazon Relational Database Service(RDS)를 사용하면 클라우드에서 관계형 데이터베이스를 간편하게 설정, 패치 및 백업과 같은 시간 소모적인 관리 작업을 자동화하면서 비용 효율적이고 크기 조정 가능한 용량을 제공합니다. 사용자가 애플리케이션에 집중하여 애플리케이션에 필요한 빠른 성능, 고가용성, 보안 및 호환성을 제공할 수 있도록 지원합니다.
Amazon RDS 기초
※ 관계형 데이터베이스
- 데이터의 관계에 집중한 데이터베이스
- 미리 지정된 형식과 타입의 데이터만 저장 가능
- 테이블의 형식으로 데이터를 관리
- 행과 열을 기반으로 한 여러 테이블을 통해 데이터를 정의
- 고유의 키로 각 데이터를 식별
- 트랜잭션 지원
- 원하는 동작이 정확히 수행되거나 완전히 실패 둘 중 하나로 유지. 즉, 어중간한 상태(일부만 반영되거나, 실패했으나 데이터 변경이 되거나)는 없음
- 사용 사례: 일반적인 어플리케이션, 온라인 게임 등
RDS
- 관계형 데이터베이스를 제공하는 서비스
- Relational Database Service: 관계형 데이터베이스 <-> NoSql(DynamoDB, DocumentDB, ElasticCache)
- 가상 머신 위에서 동작. 단, 직접 시스템에 로그인 불가능 -> OS 패치, 관리 등은 AWS 역할
- RDS는 Serverless 서비스가 아님. 단, Aurora Serverless는 말 그대로 Serverless 서비스
- 암호화 지원
- 자동 백업 지원
RDS와 EC2
- 내부에서는 EC2를 활용
- VPC 안에서 동작
- 기본적으로 public IP를 부여하지 않아 외부에서 접근 불가능
- 설정에 따라 public으로 오픈 가능(DNS로 접근)
- 서브넷과 보안 그룹 지정 필요
- EC2 타입의 지정 필요
- 스토리지는 EBS를 활용
- 중지 가능. 단, 7일 후에 다시 시작됨
RDS의 인증 방법
- 전통적인 유저/패스워드 방식
- AWS Secrets Manager와 연동하여 자동 로테이션 가능
- IAM DB 인증
- 데이터베이스를 IAM 유저 자격증명 / 역할을 통해 관리 가능
- Kerberos 인증
RDS에서 제공하는 DB 엔진
- MS SQL Server
- Oracle, Oracle OLAP
- MySQL Server
- PostgreSQL
- MariaDB
- IMB db2
- Amazon Aurora
RDS의 구성 및 기능
RDS Multi AZ
- 두 개 이상의 AZ에 걸쳐 데이터베이스를 구축하고 원본과 다른 DB(Standby)를 자동으로 동기화(Sync)
- 원본 DB의 장애 발생 시 자동으로 다른 DB가 원본으로 승격됨(DNS가 Standby DB로)
- Standby DB는 접근 불가능
- 퍼포먼스의 상승 효과가 아닌 안정성을 위한 서비스

읽기 전용 복제본
- 데이터베이스의 읽기 전용 복제본을 생성(Async)
- 쓰기는 원본 데이터베이스에, 읽기는 복제본에서 처리하여 워크로드를 분산
- 안정성이 아닌 퍼포먼스를 위한 서비스
- 원본 DB의 장애 발생 시 수동으로 DNS 변경이 필요함

RDS Multi Region
- 다른 리전에 지속적으로 동기화 시키는 DB클러스터를 생성
- 주로 로컬 퍼포먼스 혹은 DR 시나리오로 활용
DB Subnet Group
- RDS가 프로비전 되는 서브넷을 묶은 그룹
- 실전에서는 주로 프라이빗 서브넷만 사용
- 최소 두 개 이상의 같은 리전의 서브넷 필요
- 퍼블릭 접근을 허용하기 위해서는 퍼블릭 서브넷으로 구성 필요
Amazon Aurora

Amazon Aurora는 고성능 상용 데이터베이스의 성능과 가용성에 오픈 소스 데이터베이스의 간편성과 비용 효율성을 결합하였으며 클라우드를 위해 구축된 MySQL 및 PostgreSQL 호환 관계형 데이터베이스입니다. Amazon Aurora는 표준 MySQL 데이터베이스보다 최대 5배 빠르고 표준 PostgreSQL 데이터베이스보다 3배 빠릅니다. 또한, 1/10의 비용으로 상용 데이터베이스의 보안, 가용성 및 안정성을 제공합니다.
Amazon Aurora
- AWS에서 만든 클라우드 친화적인 관계형 데이터베이스 엔전
- 클라우드 환경에 최적화된 DB
- 다양한 기능
- 역추적: 원하는 시간으로 데이터베이스를 되돌릴 수 있음
- Aurora Serverless 사용 가능
- Serverless 환경에서 관계형 DB를 사용 가능
- 용량의 자동 증감: 10GB 부터 시작하여 10GB 단위로 용량 증가(최대 128TB)
- 연산 능력: 128vCPU와 메모리 1024Gib 까지 증가 가능
- 데이터의 분산 저장: 각 AZ마다 2개의 데이터 복제본 저장 X 최소 3개 이상의 AZ = 최소 6개의 복제본
- 3개 이상을 잃어버리기 전에는 쓰기 능력 유지
- 4개 이상을 잃어버리기 전에는 읽기 능력 유지
- 손실된 복제본은 자가 치유: 지속적으로 손실된 부분을 검사 후 복구
- Quorum 모델 사용
- 한 대의 Writer 인스턴스와 다수의 읽기 전용 인스턴스(Aurora Replicas)로 구성
- Async 복제
- 하나의 리전 안에서 생성 가능
- Writer가 죽을 경우 자동으로 Replica 중 하나가 Writer로 Failover
- 데이터 손실 없이 Failover 시 메인으로 승격 가능
- 고가용성(High Availability)를 확보
Amazon Aurora의 기능
Aurora Global Database
- 전 세계의 모든 리전에서 1초 내의 지연시간으로 데이터 액세스 가능
- 재해 복구 용도로 활용 가능
- 유사시 보조 리전 중 하나를 승격하여 메인으로 활용
- 1초의 RPO(복구 목표 시점)
- 1분 미만의 RTO(복구 목표 시간)
Aurora의 백업
- 읽기 복제본(Read Replica) 지원(Aurora Replica와 다른 개념)
- MySQL DB의 Binary log 복제(Binlog)
- 단, 다른 리전에만 생성 가능
- RDS와 마찬가지로 자동/수동 백업 가능
- 자동 백업의 경우 1~35일 동안 보관(S3에 보관)
- 수동 백업(스냅샷) 가능
- 백업 데이터를 복원할 경우 다른 데이터베이스를 생성
Aurora 데이터베이스 클로닝
- 기존의 데이터베이스에서 새로운 데이터베이스를 복제
- 스냅샷을 통해 새로운 데이터베이스를 생성하는 것 보다 빠르고 저렴함
- Copy-on-Write 프로토콜 사용
Backtrack
- 기존의 DB를 특정 시점으로 되돌리는 것(새로운 DB가 아닌 기존 DB)
- DB 관리의 실수를 쉽게 만회 가능
- 새로운 DB를 생성하는 것 보다 훨씬 빠름
- 앞 뒤로 시점을 이동할 수 있기 때문에 원하는 지점을 빠르게 찾을 수 있음
- Backtrack Window
- Target Backtrack Window
- 어느 시점 만큼 DB를 되돌리기 위한 데이터를 저장할 것인지
- 지정 시점 이전으로는 Backtrack 불가능
- Actual Backtrack Window
- 실제로 시간을 얼만큼 되돌릴지
- Target Backtrack Window보다 작아야 함
- Backtrack 활성화 시 시간 당 DB의 변화를 저장
- 저장된 용량만큼 비용 지불
- DB 변화가 많을수록 많은 로그 = 많은 비용
- DB 로그가 너무 많아 Actual Backtrack Window가 Target Backtrack Window(설정값)보다 작을 경우 알림
- MySQL만 가능
- Aurora 생성 시 Backtrack을 설정한 DB만 Backtrack 가능
- 스냅샷을 복구하거나 Clone을 통해 기능 활성화 가능
※ RDS 비용 vs Aurora 비용
| RDS 비용 | Aurora 비용 |
|---|
| 인스턴스 비용 | 온디맨드 / 예약 인스턴스 | 온디맨드 / 예약 인스턴스 / Serverless |
| 스토리지 비용 | SSD/IOPS 특화 등 EBS와 동일 | O |
| 데이터 전송 비용 | O | O |
| 기타 비용 | 백업, 라이센스 비용, 추가 기능 비용 등 | 백업, 추가 기능 비용 등 |
실습 - Aurora Backtrack
- RDS 데이터베이스 생성

- 역추적 활성화

- DB툴에서 엔드포인트 이름으로 연결

- 역추적

Aurora Serverless

Amazon Aurora Serverless는 Amazon Aurora의 온디맨드 Auto Scaling 구성입니다. 애플리케이션 요구 사항을 기반으로 자동으로 시작 및 종료하고 용량을 확장 또는 축소합니다. Aurora Serverless를 사용하면 데이터베이스 용량을 관리하지 않고도 클라우드에서 데이터베이스를 실행할 수 있습니다.
Aurora Serverless
- Aurora의 Serverless 버전
- 즉, 인스턴스를 미리 프로비전 하거나 관리할 필요가 없음
- T2.micro / T2.midium 등의 인스턴스 타입 선택 역시 불필요
- V1과 V2가 존재
ACU(Aurora Capacity Unit)
- 약 2gb RAM, CPU, 네트워크
- 최대/최소 ACU 설정 가능
- AWS에서 Warm Pool에서 인스턴스를 준비하고 스케일링에 따라 인스턴스를 할당/회수
※ Aurora Serverless V1 vs V2

Amazon RDS 인증과 접속
Amazon RDS 접속
- RDS 생성 시 두 종류의 IP가 할당
- Private IP: 기본적으로 할당
- VPC 내부의 리소스가 RDS에 접근하기 위해서 사용
- RDS의 DB Instance가 위치한 서브넷에 따라 Range 결정
- Public IP: 퍼블릭 접근 가능 옵션을 선택했을 경우 할당
- Private 서브넷에 DB Instance가 있을 경우 할당되지 않음
- RDS의 IP는 다양한 상황에서 변경
- 중지 -> 재시작, DB 인스턴스가 교체, AWS에서 점검, OS 패치, DB 엔진 버전 업데이트 등
- 따라서 가능하면 DNS로 접근하는 것을 권장
- 일반적으로 Production DB의 경우 프라이빗 서브넷에 두는 경우가 많음
- 보안적으로 매우 뛰어남
- Bastion Host를 사용해서 접근
- Instance Connect Endpoint가 있을 경우 활용하여 접근 가능(무료)
- 3389 포트만 활용 가능. 즉, RDS 3389로만 사용해야 함
- IP 주소 확보 필요
Amazon RDS 인증
- 일반적인 Username/Password
- AWS Secrets Manager로 관리 가능
- IAM 인증
- IAM을 활용해 임시 토큰을 생성하여(15분) RDS에 접속하는 방법
- 이때 IAM 인증을 허용해줄 유저를 DB에 넣어줘야 함
- 토큰 생성을 위해서는 rds-db:connect 권한 필요
- IAM 컨디션 활용 가능
- 예: "인턴은 type:devonly 태그가 붙은 RDS 인스턴스에 회사 아이피로 1월 1일부터 1월 16일까지 아침 8시부터 저녁 6시까지만 접속 가능
- Kerberos
실습 - RDS 접속과 인증
※ 목표
- 프라이빗 서브넷에 생성된 RDS에 베스천 호스트를 만들어서 접속. 또는, EC2 Instance Connect Endpoint로 베스천 호스트 없이 접속
- RDS에 IAM DB 인증을 활용하여 접속
-
기본 VPC에 두 개의 프라이빗 서브넷 생성


※ CIDR 블록에 기본 VPC 서브넷의 CIDR을 입력하여 > 버튼을 눌러 기본 서브넷과 분리된 서브넷을 생성

a. 라우트 테이블 생성 및 서브넷 연결

-
프라이빗 서브넷에 RDS를 프로비전
a. 서브넷 그룹 생성

b. 생성한 서브넷 추가

c. RDS 데이터베이스 생성 시 생성한 서브넷 그룹 선택

d. 데이터베이스 포트 변경(EC2 Instance Connect Endpoint 연결을 위해 3389로 변경)

e. 암호 및 IAM 데이터베이스 인증 선택

-
베스천 호스트를 통해 RDS 접속 확인
a. 베스천 호스트 EC2 인스턴스 생성
b. DB 툴에서 SSH 연결 설정

※ Host/IP: 베스천 호스트 퍼블릭 IP
※ User Name: ec2-user
※ Private Key: 키페어
c. RDS 연결 정보 설정

※ Server Host: RDS 엔드포인트
※ Port: 3389
※ Username/Password
-
EC2 Instance Connect Endpoint 생성



-
EC2 Instance Connect Endpoint로 RDS 접속 확인
a. 사용자 액세스 키 생성 및 프로필 생성


b. 터미널에 스크립트 입력 => aws ec2-instance-connect open-tunnel --instance-connect-endpoint-id {ec2_connect_endpoint_id} --private-ip-address {rds_ip} --local-port 3306 --remote-port 3389 --profile {profile} --region ap-northeast-2
※ RDS IP 확인: 콘솔에서 dig {rds 엔드포인트}
c. DB 툴에서 localhost로 접속

- IAM DB 인증 토큰으로 RDS 접속 확인
a. 터미널에 스크립트 입력 => aws rds generate-db-auth-token --hostname {rds_dns} --port 3389 --region ap-northeast-2 --username {username}
b. 토큰 복사
c. 연결 시 password에 토큰 입력
참고
https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard