[AWS RDS] RDS Proxy
- 커넥션풀을 관리하여 RDS에서 발생할 수 있는 연결 오류 및 오버헤드 방지
l Version : Amazon RDS
AWS Relational Database Service(RDS)는 관리형 데이터베이스 서비스이다. RDS는 제한된 수의 커넥션 연결만 허용하는데 최근 애플리케이션의 패턴이 발전하고, 특히 서버리스 애플리케이션 에서는 많은 수의 DB 커넥션을 발생시킨다. 이렇게 제한된 숫자 이상의 커넥션 연결을 요청하게 되면 데이터베이스는 커넥션 연결 오류가 발생하고 애플리케이션은 정상적인 서비스 제공이 불가능하게 된다. 이러한 문제점을 해결하기 위해서 RDS Proxy(프록시)를 사용할 수 있다.
RDS 프록시는 다른 프록시 서비스와 유사하게 작동한다. 기본적으로 미들웨어 역할을 하여 RDS 데이터베이스 인스턴스와 Amazon Aurora 데이터베이스 클러스터로 들어오는 네트워크 트래픽을 구성한다.
RDS Proxy는 일반 프록시보다 훨씬 더 많은 기능을 제공한다. RDS 데이터베이스를 위해 특별히 설계되었으며 데이터베이스 프로토콜, 요청 및 응답 처리, 데이터베이스에서 클라이언트 애플리케이션으로 다시 푸시한 결과를 인식하는 기능이 있다.
RDS 프록시는 DB 연결을 풀링 및 공유하여 작동하므로 애플리케이션의 확장성과 데이터베이스 오류에 대한 탄력성을 높인다. RDS 프록시 사용의 주요 이점은 아래와 같다.
l 연결 풀링 및 연결 공유를 사용하여 열려 있는 데이터베이스 연결 수를 줄여 애플리케이션 성능 향상
l 데이터베이스가 애플리케이션 연결을 처리하기 위한 CPU및 메모리 절약
l 데이터베이스 장애조치(failover)와 같은 오류 시나리오 동안 애플리케이션 가용성을 개선
l TLS/SSL 및 AWS IAM을 포함한 모든 RDS 보안 기능을 사용하여 애플리케이션 코드에서 데이터베이스 연결에 대한 자격증명 불필요
l RDS Proxy에서 사용하는 리소스는 RDS 데이터베이스용으로 프로비저닝된 리소스와 독립적이므로 데이터베이스에 대한 추가 오버헤드를 발생시키지 않음
보안 측면에서 장점을 조금 더 설명하면, AWS Secrets Manager와도 작동한다. 더 이상 데이터베이스 자격 증명을 노출하거나 어떤 방식으로든 하드 코딩할 필요가 없다. 따라서 RDS Proxy가 Secrets Manager와 함께 작동하도록 구성하면 더 엄격한 보안 정책을 시행할 수 있다. 예를 들어 TLS를 활성화하려면 유효한 인증서를 AWS Certificate Manager에 추가한 다음 이를 사용하도록 RDS 프록시를 구성하기만 하면 된다. 구성이 –ssl-mode를 지원하기 때문에 종단 간 통신에 SSL 사용을 시행하는 것도 편리하다.
RDS 프록시를 모니터링하는 방법으로는 Amazon CloudWatch를 사용하여 모니터링할 수 있다. CloudWatch는 RDS 프록시와 잘 통합되어 프록시의 성능과 동작을 이해하는 데 사용할 수 있는 유용한 지표를 제공한다. 아래 목록은 모니터링에 사용되는 주요 지표들이다.
l DatabaseConnections: 백엔드 데이터베이스에 대한 데이터베이스 연결 수
l DatabaseConnectionsCurrentlyBorrowed: 현재 애플리케이션에서 사용 중인 연결 수. 이 지표에 대한 알림을 설정하여 빠르게 알림을 받을 수 있도록 한다.
l DatabaseConnectionsCurrentlySessionPinned: 고정 상태의 연결 수. 이 숫자는 RDS 프록시 성능을 최대화하려면 이상적으로는 가능한 한 낮아야 한다.
CloudWatch를 사용한 RDS Proxy 모니터링에 관한 자세한 내용은 아래 링크를 참고 한다.
l Monitoring RDS Proxy metrics with Amazon CloudWatch : https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.monitoring.html
RDS 프록시에 대한 몇 가지 주요 제한 사항으로는 아래와 같이 정리할 수 있다.
l RDS 프록시는 데이터베이스 인스턴스와 동일한 VPC에 있어야 한다. 데이터베이스 인스턴스가 있는 경우에도 프록시에 공개적으로 액세스할 수 없다.
l RDS 프록시는 자체 관리형 EC2 인스턴스 기반 데이터베이스와 함께 사용할 수 없다.
l RDS 프록시는 아직 Aurora Serverless에 사용할 수 없다. 현재 Aurora MySQL, Aurora PostgreSQL, RDS MySQL, RDS PostgreSQL 에서 사용할 수 있다.
l 프록시는 1개의 데이터베이스 인스턴스에만 연결할 수 있다.
RDS Proxy를 구성하는 방법으로는 아래 링크를 참고하여 실습할 수 있다.
l AWS RDS Proxy를 사용한 공유 데이터베이스 연결 설정 : https://aws.amazon.com/ko/getting-started/hands-on/set-up-shared-database-connection-amazon-rds-proxy/
[참고자료]
l https://aws.amazon.com/rds/proxy/
l https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.html
2022-03-23 / Sungwook Kang / http://sungwookkang.com
AWS RDS, RDS Proxy, 아마존 프록시, DB Pooling, DB Connection
'AWS' 카테고리의 다른 글
[AWS MySQL] AWS JDBC Driver for MySQL (2) | 2022.03.28 |
---|---|
[AWS] What is AWS Graviton processor? (0) | 2022.03.26 |
[AWS RDS] Modify RDS instance type (0) | 2022.03.23 |
[AWS RDS] Modify RDS SQL Server Standard Edition to Enterprise Edition (0) | 2022.03.22 |
[AWS Aurora] Aurora I/O Planning (0) | 2022.03.20 |