AWS

RDS (3)

S_N_Y 2024. 3. 24. 11:39

 

#0 RDS Backups 🗂️

RDS 서비스가 자동으로 매일 데이터베이스의 전체 백업을 수행한다.

백업에는 두 가지 옵션이 존재한다.

1. Automated backups(자동 백업) : 트랜잭션 로그의 가장 빠른 백업은 5분으로 설정되어있어서 자동 백업을 통해 언제라도 5분 전으로 복원할 수 있는데 자동 백업의 보존 기간은 1~35일 사이로 설정할 수 있고 이 기능을 만약 사용하고 싶지 않으면 0으로 설정해두면 된다.

2. Manual DB Snapshots(수동 데이터베이스 스냅샷) : 사용자가 수동으로 트리거하는데 이 방법의 장점은 한 백업을 원하는 기간 동안 유지할 수 있다는 점이다. 자동 백업은 위와 같이 만료 기간이 정해져있는데 이 옵션은 원하는 기간 동안 보관할 수 있다.

 

+) 비용 절감 요령 팁 :

RDS를 한 달에 2시간만 사용한다고 쳤을 때, 2시간동안 사용한 후 스냅샷을 만든 다음 원본 데이터베이스를 삭제하면 된다.

=> RDS 데이터베이스의 실제 스토리지 비용보다 훨씬 저렴하고 다시 데이터베이스를 사용할 준비가 되면, 스냅샷을 복원하여 사용하면 된다!

 

#1 Aurora Backups 🗂️

Aurora 백업도 매우 유사하다.

1. Automated backups(자동 백업) :  이것도 마찬가지로 1~35일까지 가능하나 비활성화가 안 된다. (RDS는 가능, Aurora는 불가능)

그리고 해당 기간의 어느 시점으로든 복구할 수 있는 시점 복구 기능도 있다.

2. Manual DB Snapshots(수동 데이터베이스 스냅샷) : RDS랑 똑같이 사용자가 수동으로 트리거할 수 있다.

 

#2 RDS & Aurora Security (보안 옵션) 🛡️

RDS 혹은 Aurora 데이터베이스에 저장된 데이터를 암호화할 수 있다.

(=데이터가 볼륨에 암호화된다는 뜻)

KMS를 사용해서 마스터나 모든 복제본들의 암호화가 이루어지고 이거는 데이터베이스를 처음 실행할 때 암호화가 정의된다. 만약 어떤 이유에서든 주 데이터베이스를 암호화하지 않았다면 읽기 전용 복제본 또한 암호화할 수 없다.

그리고 암호화 되어있지 않은 기존 데이터베이스를 암호화하려면 암호화되지 않은 데이터베이스의 데이터베이스 스냅샷을 가지고 와서 암호화된 데이터베이스 형태로 데이터베이스 스냅샷을 복원해야 한다.

 

+)

- In-filght encryption(전송 중 데이터 암호화) 기능 :

기본적으로 RDS나 Aurora의 각 데이터베이스는 전송 중 데이터 암호화 기능을 갖추고 있다.

그래서 클라이언트는 AWS 웹사이트에서 제공하는 TLS root 인증서를 사용한다.

- IAM authentication 사용하기 : IAM roles를 사용해서 사용자 이름이나 패스워드 없이 직접 데이터베이스를 인증하게 할 수도 있다.

그 외에 Security Groups를 사용하거나 RDS나 Aurora는 관리형 서비스라 SHH 액세스가 없으나 RDS 커스텀 서비스는 예뢰하던지 시간에 따라 RDS나 Aurora에 어떤 쿼리가 생성되어 있고 데이터베이스를 확인하려면 Audit Log(감사 로그) 작성을 활성화한다던지 RDS 및 Aurora의 보안 옵션은 이렇듯 여러 가지가 있는 것을 확인할 수 있다..

 

#3 RDS Proxy

VPC 내에 RDS 데이터베이스를 배포할 수 있었는데

완전 관리형인 RDS 데이터베이스 프록시도 배포할 수 있다. (RDS에서 바로 액세스하면 됨)

...

그런데 왜 프록시가 필요할까?🤔

Amazon RDS Proxy를 사용하면 애플리케이션이 데이터베이스 내에서 데이터베이스 연결 풀을 형성하고 공유할 수 있다. 애플리케이션을 RDS 데이터베이스 인스턴스에 일일이 연결하는 대신에 프록시에 연결하면 프록시가 하나의 풀에 연결을 모아서 RDS 데이터베이스 인스턴스로 가는 연결을 줄일 수 있는 것이다.

=> RDS 데이터베이스 인스턴스에 연결이 많을 경우, CPU와 RAM 등 데이터베이스 리소스의 부담을 줄여서 데이터베이스의 효율성을 올리고 시간을 초과하는 불상사를 최소화할 수 있기 때문이다!

 

그리고 RDS 프록시는 완전 관리형 serverless로 오토 스케일링이 가능하니 용량을 관리할 필요도 없도 다중 AZ를 지원하며 RDS 데이터베이스 인스턴스에 장애 조치가 발생하면 기본 인스터스가 아니라 대기 인스턴스로 실행된다.

=> 메인 RDS 데이터베이스 인스턴스에 애플리케이션을 모두 연결하고 장애 조치를 각자 처리하는 대신에 장애 조치와 무관한 RDS 프록시에 연결하는 것이다.

✅ 정리 : RDS 프록시는 RDS, Aurora를 지원하고 애플리케이션의 코드를 변결하지 않아도 되며 RDS 데이터베이스 인스턴스나 Aurora 데이터베이스에 연결하는 대신 RDS 프록시에 연결하기만 하면 된다..!

-------------------------------------------------------

데이터베이스에 IAM 인증을 강제하는데 IAM 인증을 통해서만 RDS 데이터베이스 인스턴스에 연결하도록 할 수 있다. 이때 자격 증명은 AWS Secrets Manager 서비스에 안전하게 저장된다.

+) Lambda 함수에 RDS 프록시를 사용하면 상당히 유용한데 먼저 Lambda 함수 특징이 여러 개가 증식되고 사라지는 속도도 매우 빠른데 RDS 데이터베이스 인스턴스에 수만 개의 Lambda함수가 순식간에 발생했다 사라지며 연결을 개방한다고 생각했을 때, 개방된 연결에 시간 초과도 생길테니 난리가 날 것이다.

=> 그래서 RDS 프록시를 사용해서 Lambda함수의 연결 풀을 생성하면 Lambda함수가 RDS 프록시를 오버로드한다.

=> RDS 프록시가 풀을 생성하면 RDS 데이터베이스 인스턴스 연결이 줄어들어서 문제가 해결되는 것이다..!