Amazon Aurora
- 시험에 자주 나온다..!!
- AWS 고유 기술 ( not open sourced )
- Postgres 및 MySQL과 호환됨
- 클라우드에 최적화 되어 있음
- RDS의 MySQL보다 5배 좋은 성능
- RDS의 Postgres보다 3배 좋은 성능
- Aurora의 스토리지는 자동으로 확장
- 읽기 전용 복제본 15개까지 가능 ( MySQL은 최대 5개 )
- 비용이 RDS에 비해 20% 정도 높지만 스케일링 측면에서 훨씬 효율적
- 높은 가용성과 읽기 스케일링
- 3개의 AZ에 걸쳐 기록할 때마다 6개의 사본 저장
- Write에는 6개 사본 중 4개만 있으면 됨
- Read에는 6개 사본 중 3개만 있으면 됨
- 자가 복구 기능
- 일부 데이터가 손상되거나 문제가 있으면 백엔드에서 P2P 복제를 통한 자가 복구 진행
- 수 백개의 볼륨을 사용함
- 쓰기를 받는 인스턴스는 하나 뿐 ( 마스터 인스턴스 )
- 마스터가 작동하지 않으면 평균 30초 이내로 장애 조치 시작
- 마스터에 문제가 생기면 읽기 전용 복제본 중 하나가 마스터가 되어 대체
- 리전 간 복제를 지원함 ( Global Aurora 생성 가능 )
- Aurora 작동 방식
- 라이터(Writer) 엔드폰인트를 통해 DNS 이름으로 항상 마스터를 가리킴
- 자동 스케일링을 통해 절적한 수의 읽기 전용 복제본 존재하도록 할 수 있음 ( 복제본 CPU 사용량 또는 복제본 접속 횟수에 기반해 복제본 스케일링 가능 )
- 리더(Reader) 엔드포인트를 통해 모든 읽기 전용 복제본과 자동으로 연결
- 읽기 복제본 중 하나로 연결되어 로드 밸런런싱을 도와줌
- 로드 밸런싱은 연결 레벨이서 이루어진다..!!

- Aurora 추가 기능

Aurora 실습
- RDS > 데이터베이스 생성 > Aurora > 각 옵션 선택

- 데이터베이스를 생성하면 Region 클러스터와 그 안에 Writer 인스턴스, Reader 인스턴스가 나누어져 생성되어 있음 ( 서고 다른 AZ에 존재 )
Aurora 심화
- 복제본 자동 스케일링

- 사용자 지정 엔드포인트
- 사용자 지정 엔드포인트가 있으면 일반적으로 Reader 엔드포인트는 사용하지 않음, 사라지는 것은 아님!!

- Serverless 기능
- 실제 사용량에 기반한 자동 데이터베이스 인스턴스화와 자동 스케일링 가능하게 해줌
- 비정기적, 간헐적, 예측 불허한 워크로드에 유용
- 용량 계획 세울 필요가 없음
- 각 Aurora 인스턴스에 대해 매 초당 비용 지불하게 됨

- Multi-Master
- Writer 노드에 대한 즉각적 장애 조치
- Writer 노드에 높은 가용성을 갖추고자 할 때 사용
- Aurora 클러스터의 모든 노드에서 읽기 및 쓰기 가능

- Global Aurora
- 모든 쓰기 및 읽기가 진행되는 하나의 기본 리전이 존재
- 복제 지연이 1초 미만인 보조 읽기 전용 리전 5개까지 설정 가능
- 각 보조 지역마다 읽기 전용 복제본 16개까지 생성 가능
- 한 리전의 데이터베이스가 작동 중단될 경우 재해 복구 목적으로 다른 지역을 승격하는데 필요한 복구 시간(RTO) 목표는 1분 미만
- Auroroa Global 데이터베이스에서 Region에 걸쳐 데이터 복제에 걸리는 시간은 평균 1초 미만 ( 시험에 출제 !! )

- Aurora Machine Learning
- ML 기반 예측을 SQL 인터페이스로 애플리케이션에 적용
- SageMaker, Amazon Comprehend 서비스 지원
- 맞춤 광고, 감정 분석 제품 추천 등이 있음

RDS 백업
- 자동 백업
- 자동으로 매일 데이터베이스 유지 관리 시간에 DB 전체 백업
- 5분마다 트랜잭션 로그도 백업
- 가장 최신 백업이 5분 전이므로, 5분 전 어떤 시점으로도 복구 가능
- 자동 백업 보유 기간은 1일에서 35일까지 설정 가능
- 비활성화 가능, 보유 기간 0으로 설정
- 수동 dB 스냅샷 생성
- 사용자가 수동으로 트리거
- 원하는 만큼 오랫동안 보유할 수 있다는 장점이 있음
- ex) 매달 2시간만 사용하는 RDS 데이터베이스가 있다면?
- 이 경우 데이터베이스를 정지하게 되면 정지했음에도 불구하고 스토리지 비용을 지불해야 함
- 하지만, 2시간 사용 후 스냅샷을 만들고 원본 데이터베이스 삭제
- 스냅샷의 비용은 RDS 데이터베이스 스토리지보다 훨씬 저렴하니까!
- 이후, 데이터베이스 사용할 때가 되면 스냅샷 복원해서 사용하면 된다
Aurora 백업
- 최대 35일까지 보유 가능한 자동 백업, 비활성화 불가능
- 정해진 시간 범위 내의 어느 시점으로도 복구 가능
- 수동 DB 스냅샷 있음, 우너하는 기간 보유 가능
RDS & Aurora 복원 옵션
- 백업 또는 스냅샷을 통해 복원
- S3로부터 MySQL RDS DB 복원 가능
- 온프레미스 데이터베이스 백업을 만들어 객체 스토리지인 Amazon S3에 두는 것
- Amazon S3에서 MySQL을 실행 중인 새로운 RDS 인스턴스로 백업 파일을 복원하느 방법
- MySQL Aurora 클러스터로 복구하고 싶다면?
- 온프레미스 데이터베이스를 외부로 다시 백업하고 Percona XtraBackup이라는 소프트웨어 사용하면됨
- 그러면 Amazon S3로 백업 파일 전송
- 그리고 백업 파일을 MySQL을 실행 중인 새 Aurora 클러스터로 복원하면 됨!!
- 차이점은 RDS MySQL로 복원할 때에는 데이터베이스 백업만 있으면 되고 Aurora MySQL로 복원할 때에는 percona XtraBackup를 사용해서 백업한 다음 S3로부터 Aurora DB 클러스터로 복원하면 된다는 점
Aurora Database 복제 기능
- 기존의 데이터베이스로부터 새로운 Aurora DB 클러스터 생성 가능

- 데이터베이스 복제는 매우 빠르고 비용 면에서 효율적
- 프로덕션 데이터베이스에 영향을 주지 않음
RDS & Aurora Security
- 저장된 데이터를 암호화할 수 있음
- KMS를 사용해 마스터와 모든 복제본의 암호화가 이루어짐
- 데이터베이스를 처음 실행할 때 정의됨
- 마스터 데이터베이스가 암호화 되어야 복제본도 암호화 가능
- 전송 중 데이터 암호화 기능도 갖추고 있음
- 클라이언트는 AWS 웹사이트에서 제공하는 TLS 루트 인증서 사용해야함
- 데이터베이스 인증
- 사용자 이름과 패스워드
- IAM 역할 사용
- 보안 그룹 사용
- RDS와 Aurora는 SSH 엑세스가 없음
- 감사 로그 활성화를 통해 쿼리와 데이터베이스 생성 확인 가능
- 시간 지나면 자동 삭제
- 장기간 보관하고 싶으면 AWS에 있는 CloudWatch Logs 서비스로 전송
Amazon RDS Proxy
- VPC내에 완전 관리형 RDS 데이터베이스 프록시 배포 가능
- Amazon RDS Proxy 사용하면 애플리케이션이 데이터베이스 내에서 데이터베이스 연결 풀을 형성하고 공유 가능
- 프록시가 하나의 풀에 연결을 모아 RDS 데이터베이스로 가는 연결이 줄어듬

- RDS 데이터베이스 인스턴스에 연결이 많은 경우 프록시를 사용하여
- CPU와 RAM 등 데이터베이스 리소스의 부담을 줄여 데이터베이스 효율성을 향상시킬 수 있음
- 데이터베이스에 개방된 연결과 시간초과를 최소화할 수 있음
- RDS 프록시는 완전한 서버리스
- 오토 스케일링 가능하여 용량 관리 필요 없음
- 가용성이 높음
- 다중 AZ 지원함
- 장애 조치 발생하면 대기 인스턴스로 실행됨
- RDS 프록시는 MySQL, PostgreSQL, MariaDB용 RDS 지원
- MySQL, PostgreSQL용 Aurora 지원
- 애플리케이션 코드를 변경하지 않아도 됨
- RDS 데이터베이스 인스턴스나 Aurora 데이터베이스에 연결하는 대신 RDS 프록시에 연결하기만 하면 됨
- 데이터베이스에 IAM 인증을 강제함으로써 IAM 인증을 통해서만 RDS 데이터베이스 인스턴스에 연결하도록 할 수 있음
- 자격 증명은 AWS Secrets Manager 서비스에 안전하게 저장 됨
- RDS는 퍼블릭 액세스 불가능, VPC 내에서만 엑세스 가능
- Lambda 함수는 증식하여 여러 개가 생성 및 삭제되는 속도가 빠름
- RDS 프록시를 사용하여 Lambda 함수의 연결 풀을 생성하면 Lambda 함수가 RDS 프록시를 오버로드함
- RDS 프록시가 풀을 생성하면 RDS 데이터베이스 인스턴스 연결이 줄어 문제가 해결되는 것