BLOG
AWS re:Invent 2019에서 Amazon Relational Database Service (RDS)를 위한 매니지드 고 가용성 데이터베이스 프록시인 Amazon RDS 프록시를 선보였습니다. 그 다음으로는 MySQL의 엔진의 미리보기, PostgreSQL 호환성을 보여 드렸는데요, 오늘은 두 엔진 모두에서 가능한 서비스를 알려드리게 되었습니다.
AWS Lambda, Fargate, Amazon ECS 또는 EKS를 사용하는 최신 서버리스 아키텍처를 기반으로 구축된 애플리케이션을 포함한 많은 애플리케이션은 데이터베이스 서버에 대한 많은 오픈 커넥션을 가질 수 있으며 데이터베이스 연결을 빠르게 실행 및 해제할 수 있습니다.
Amazon RDS 프록시를 통해 애플리케이션은 데이터베이스와 설정된 연결을 풀링하고 공유함으로써 데이터베이스 효율성, 애플리케이션 확장성 및 보안을 향상시킵니다. RDS 프록시는 장애 조치 후 클라이언트 복구 시간을 Amazon Aurora MySQL의 경우 최대 79 %, Amazon RDS for MySQL의 경우 최대 32% 줄입니다. 또한 AWS Secrets Manager 및 AWS Identity and Access Management (IAM) 와의 통합을 통해 인증 및 액세스를 관리할 수 있습니다.
코드 변경 없이 대부분의 애플리케이션에 Amazon RDS 프록시를 활성화할 수 있으며 추가 인프라를 프로비저닝하거나 관리할 필요가 없으며 프록시가 활성화된 데이터베이스 인스턴스의 vCPU당 요금만 지불하면 됩니다.
시작 방법
몇 번의 클릭만으로 AWS 관리 콘솔로 이동하여 RDS 데이터베이스에 대한 RDS 프록시 엔드 포인트를 생성하여Amazon RDS 프록시를 시작할 수 있습니다. 탐색 분할 창에서 프록시 및 프록시 작성을 선택하면 아래의 프록시 패널이 나타납니다.
프록시를 만들려면 선택한 고유 이름인 프록시 식별자를 지정하고 데이터베이스 엔진 (MySQL 또는 PostgreSQL)을 선택하세요. 프록시가 애플리케이션과 프록시 사이의 모든 연결에 대해 TLS / SSL을 적용하도록 하려면 암호화 설정을 선택하고 프록시가 이를 닫기 전에 클라이언트 연결 유휴 상태 기간을 설정하세요.
이전 요청이 완료된 후 지정된 시간 내에 애플리케이션이 새 요청을 제출하지 않으면 클라이언트 연결이 유휴 상태로 간주됩니다. 프록시와 데이터베이스 간의 기본 연결은 열린 상태로 유지되며 연결 풀로 리턴됩니다. 따라서 새 클라이언트 연결에 재사용할 수 있습니다.
다음으로 이 프록시를 통해 액세스할 데이터베이스에서 하나의 RDS DB 인스턴스 또는 Aurora DB 클러스터를 선택하세요. 이 목록에는 호환 가능한 데이터베이스 엔진, 엔진 버전 및 기타 설정이 있는 DB 인스턴스 및 클러스터만 포함됩니다.
연결 풀 최대 연결 수를 1-100 사이의 값으로 지정하세요 .이 설정은 max_connections RDS 프록시가 연결에 사용할 수 있는 값의 백분율을 나타냅니다. 이 DB 인스턴스 또는 클러스터에 하나의 프록시만 사용하려는 경우 이를 100으로 설정할 수 있습니다. RDS 프록시가 이 설정을 사용하는 방법에 대한 자세한 내용은 연결 제한 및 시간 초과를 참고하세요.
이 프록시로 액세스하려는 RDS DB 인스턴스 또는 Aurora DB 클러스터와 연결된 Secrets Manager 시크릿을 하나 이상 선택하고 선택한 Secrets Manager의 시크릿에 액세스할 수 있는 권한이 있는 IAM 역할을 선택하세요. 기존 비밀번호가 없는 경우 RDS 프록시를 설정하기 전에 새 비밀번호 작성을 클릭하세요.
VPC 서브넷 및 보안 그룹을 설정한 후 프록시 생성을 클릭하세요. 자세한 설정에 대해서는 설명서를 참고하세요.
몇 분 기다린 후 새 RDS 프록시를 확인하고 애플리케이션을 RDS 프록시 엔드 포인트로 지정하세요. 이렇게 모든 작업이 완료되었습니다.
AWS CLI 명령을 통해 RDS 프록시를 쉽게 만들 수도 있습니다.
aws rds create-db-proxy \
–db-proxy-name channy-proxy \
–role-arn iam_role \
–engine-family { MYSQL|POSTGRESQL } \
–vpc-subnet-ids space_separated_list \
[–vpc-security-group-ids space_separated_list] \
[–auth ProxyAuthenticationConfig_JSON_string] \
[–require-tls | –no-require-tls] \
[–idle-client-timeout value] \
[–debug-logging | –no-debug-logging] \
[–tags comma_separated_list]
작동 방식
데이터베이스를 재부팅하거나 문제로 인해 데이터베이스를 사용할 수 없을 때 페일 오버 중에 열린 연결을 계속 작동시키는 방법을 보여주는 예를 살펴 보겠습니다. 이 예에서는channy-proxy로 이름을 지정한 프록시와 Aurora DB 클러스터DB 인스턴스 instance-8898 및 instance-9814인 프록시를 사용합니다. failover-db-cluster명령은 리눅스 명령 줄, 프록시가 다른 DB 인스턴스 변경에 연결되어 있는지 작가 인스턴스에서 실행됩니다. 연결이 열려있는 동안 프록시와 연결된 DB 인스턴스가 변경되는 것을 볼 수 있습니다.
$ mysql -h channy-proxy.proxy-abcdef123.us-east-1.rds.amazonaws.com -u admin_user -p
Enter password:
…
mysql> select @@aurora_server_id;
+——————–+
| @@aurora_server_id |
+——————–+
| instance-9814 |
+——————–+
1 row in set (0.01 sec)
mysql>
[1]+ Stopped mysql -h channy-proxy.proxy-abcdef123.us-east-1.rds.amazonaws.com -u admin_user -p
$ # Initially, instance-9814 is the writer.
$ aws rds failover-db-cluster –db-cluster-id cluster-56-2019-11-14-1399
JSON output
$ # After a short time, the console shows that the failover operation is complete.
$ # Now instance-8898 is the writer.
$ fg
mysql -h channy-proxy.proxy-abcdef123.us-east-1.rds.amazonaws.com -u admin_user -p
mysql> select @@aurora_server_id;
+——————–+
| @@aurora_server_id |
+——————–+
| instance-8898 |
+——————–+
1 row in set (0.01 sec)
mysql>
[1]+ Stopped mysql -h channy-proxy.proxy-abcdef123.us-east-1.rds.amazonaws.com -u admin_user -p
$ aws rds failover-db-cluster –db-cluster-id cluster-56-2019-11-14-1399
JSON output
$ # After a short time, the console shows that the failover operation is complete.
$ # Now instance-9814 is the writer again.
$ fg
mysql -h channy-proxy.proxy-abcdef123.us-east-1.rds.amazonaws.com -u admin_user -p
mysql> select @@aurora_server_id;
+——————–+
| @@aurora_server_id |
+——————–+
| instance-9814 |
+——————–+
1 row in set (0.01 sec)
+—————+—————+
| Variable_name | Value |
+—————+—————+
| hostname | ip-10-1-3-178 |
+—————+—————+
1 row in set (0.02 sec)
RDS 프록시를 사용하면 복잡한 장애 처리 코드를 작성할 필요 없이 데이터베이스 장애를 투명하게 허용할 수 있는 응용 프로그램을 구축할 수 있습니다. RDS 프록시는 애플리케이션 연결을 유지하면서 트래픽을 새 데이터베이스 인스턴스로 자동 라우팅합니다.
RDS 프록시 개요와 Lambda 함수에서 RDS 프록시에 액세스하기 위해 수행해야 하는 단계에 대한 데모를 검토할 수 있습니다.
최대 로드 시에도 서버리스 애플리케이션이 어떻게 우수한 성능을 유지하는지 알고 싶다면 이 블로그 게시물을 참고하세요. 서버리스로 MySQL용 RDS 프록시를 사용하는 방법에 대한 자세한 내용은 이 게시물을 참조하세요.
다음은 몇 가지 주의 사항입니다.
- 현재 RDS 프록시는 MySQL 및 PostgreSQL 엔진 제품군에서 사용할 수 있습니다. 이 엔진 제품군에는 MySQL 5.6 및 5.7 용 RDS, PostgreSQL 10.11 및 11.5가 포함되어 있습니다.
- Aurora 클러스터에서 연결 풀의 모든 연결은 Aurora 기본 인스턴스에 의해 처리됩니다. RI 워크로드에 대한 로드 밸런싱을 수행하려면 여전히 Aurora 클러스터에 대해 리더 엔드 포인트를 계속 사용하세요.
- RDS 프록시는 데이터베이스와 동일한 VPC에 있어야 합니다. 데이터베이스에 공개적으로 액세스할 수 있지만 프록시에는 액세스할 수 없습니다.
- 프록시는 압축 모드를 지원하지 않습니다. 예를 들어, mysql 명령의 –compress또는 -C옵션에 사용되는 압축을 지원하지 않습니다.
사용 가능 리전
아마존 RDS 프록시는 Amazon Aurora with MySQL compatibility, Amazon Aurora with PostgreSQL compatibility, Amazon RDS for MySQL, Amazon RDS for PostgreSQL와 함께 서울 리전을 포함한 다음 리전에서 사용 가능합니다.
- 아시아 태평양: 서울, 뭄바이, 싱가포르, 시드니, 도쿄
- 캐나다: 중부
- 유럽: 아일랜드, 프랑크푸르트, 런던
- 미국: 오하이오, 캘리포니아, 오레곤, 버지니아 북부
자세한 내용은 제품 페이지, 가격 및 설명서를 참고하세요. Amazon RDS AWS 포럼 또는 AWS 지원 메일을 통해 의견을 보내주세요.
업데이트: Amazon RDS 프록시와 공유 데이터베이스 연결을 설정하기 위한 10분 자습서가 를 발표되었습니다.
원문URL: https://aws.amazon.com/ko/blogs/aws/amazon-rds-proxy-now-generally-available/
** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.