Amazon RDS

wjdghks95·2024년 7월 30일
post-thumbnail

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를 활용
    • 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클러스터를 생성
    • Async 복제
  • 주로 로컬 퍼포먼스 혹은 DR 시나리오로 활용

DB Subnet Group

  • RDS가 프로비전 되는 서브넷을 묶은 그룹
    • 실전에서는 주로 프라이빗 서브넷만 사용
      • 보안적인 이유
    • 최소 두 개 이상의 같은 리전의 서브넷 필요
  • 퍼블릭 접근을 허용하기 위해서는 퍼블릭 서브넷으로 구성 필요

Amazon Aurora

Amazon Aurora는 고성능 상용 데이터베이스의 성능과 가용성에 오픈 소스 데이터베이스의 간편성과 비용 효율성을 결합하였으며 클라우드를 위해 구축된 MySQL 및 PostgreSQL 호환 관계형 데이터베이스입니다. Amazon Aurora는 표준 MySQL 데이터베이스보다 최대 5배 빠르고 표준 PostgreSQL 데이터베이스보다 3배 빠릅니다. 또한, 1/10의 비용으로 상용 데이터베이스의 보안, 가용성 및 안정성을 제공합니다.

Amazon Aurora

  • AWS에서 만든 클라우드 친화적인 관계형 데이터베이스 엔전
    • MySQL, PostgreSQL 지원
  • 클라우드 환경에 최적화된 DB
    • RDS보다 3~5배 빠름
  • 다양한 기능
    • 역추적: 원하는 시간으로 데이터베이스를 되돌릴 수 있음
  • 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
데이터 전송 비용OO
기타 비용백업, 라이센스 비용, 추가 기능 비용 등백업, 추가 기능 비용 등

실습 - Aurora Backtrack

  1. RDS 데이터베이스 생성
  2. 역추적 활성화
  3. DB툴에서 엔드포인트 이름으로 연결
  4. 역추적

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 인증을 활용하여 접속
  1. 기본 VPC에 두 개의 프라이빗 서브넷 생성


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

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

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

    b. 생성한 서브넷 추가

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

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

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

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

    ※ Host/IP: 베스천 호스트 퍼블릭 IP
    ※ User Name: ec2-user
    ※ Private Key: 키페어

    c. RDS 연결 정보 설정

    ※ Server Host: RDS 엔드포인트
    ※ Port: 3389
    ※ Username/Password

  4. EC2 Instance Connect Endpoint 생성


  5. 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로 접속

  1. 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

0개의 댓글