Amazon Web Services 한국 블로그
Amazon RDS Proxy 정식 출시 (서울 리전 포함)
지난 AWS re:Invent 2019에서 Amazon Relational Database Service(RDS)에 적합한 완전관리형의 고가용 데이터베이스 프록시인 Amazon RDS Proxy 미리 보기를 공개했습니다. 이 프록시를 사용하면 애플리케이션의 확장성을 강화하고 데이터베이스 오류에 대한 복원력을 증강하며 보안을 강화할 수 있습니다. MySQL 엔진 미리 보기에 뒤이어 PostgreSQL 호환까지 범위를 넓혔습니다. 오늘 두 가지 엔진 버전을 모두 정식 출시하게 되었다는 기쁜 소식을 알려드립니다.
AWS Lambda, Fargate, Amazon ECS 또는 EKS를 사용하여 최신 서버리스 아키텍처에 구축한 것을 포함한 대다수의 애플리케이션에는 데이터베이스 서버에 대한 열린 연결이 대량 포함되어 있는 경우가 많습니다. 또한 데이터베이스 연결을 빠른 속도로 열고 닫으면서 데이터베이스 메모리와 컴퓨터 리소스를 소진시키기도 합니다.
Amazon RDS Proxy를 사용하면 여러 애플리케이션이 데이터베이스에 설정된 연결을 지속적으로 공유하여 데이터베이스 효율성, 애플리케이션 확장성과 보안을 개선할 수 있습니다. RDS Proxy를 사용하면, 장애 조치 시간을 Amazon Aurora는 최대 79%, RDS 데이터베이스 최대 32%까지 단축할 수 있고, 데이터베이스 자격 증명, 인증과 엑세스는 AWS Secrets Manager 및 AWS Identity and Access Management(IAM)와의 통합을 통해 관리할 수 있습니다.
Amazon RDS Proxy는 코드를 변경하거나 추가 인프라를 프로비저닝 또는 관리할 필요 없이 프록시를 활성화한 데이터베이스 인스턴스의 vCPU당 요금만 지불하면 대부분의 애플리케이션에서 사용할 수 있습니다.
Amazon RDS Proxy – 시작하기
Amazon RDS Proxy는 몇 번의 클릭만으로 간단하게 시작할 수 있습니다. AWS Management Console로 이동하여 RDS 데이터베이스에 대한 RDS Proxy 엔드포인트를 생성하기만 하면 됩니다. 탐색 창에서 [프록시] 및 [프록시 생성]을 선택합니다. 아래에서도 프록시 창을 확인할 수 있습니다.
프록시를 생성하려면 사용자가 원하는 고유한 이름으로 [프록시 식별자]를 지정한 다음 데이터베이스 엔진(MySQL 또는 PostgreSQL)을 선택합니다. 애플리케이션과 프록시 간의 모든 연결에 대해 프록시가 TLS/SSL을 적용하도록 하려면 암호화 설정을 선택하고, 프록시가 클라이언트 연결을 닫기 전까지 허용되는 유휴 기간을 지정합니다.
애플리케이션이 이전 요청을 완료한 뒤 지정된 시간 안에 새 요청을 제출하지 않으면 클라이언트 연결이 유휴 상태인 것으로 간주됩니다. 프록시와 데이터베이스 간의 기본 연결은 열린 상태로 유지되며 연결 풀로 되돌아옵니다. 따라서 새 클라이언트 연결에 다시 사용할 수 있게 됩니다.
다음으로 [데이터베이스]에서 이 프록시를 통해 액세스할 하나의 RDS DB 인스턴스 또는 Aurora DB 클러스터를 선택합니다. 목록에는 호환되는 데이터베이스 엔진, 엔진 버전 및 기타 설정을 포함한 DB 인스턴스와 클러스터만 포함됩니다.
[연결 풀 최대 연결]을 지정합니다(1과 100 사이의 값이어야 함). 이 설정은 RDS Proxy가 연결에 사용할 수 있는 max_connections
값의 비율을 나타냅니다. 이 DB 인스턴스 또는 클러스터와 하나의 프록시만 사용하고 싶으면, 이 값을 100으로 설정하면 됩니다. RDS Proxy가 이 설정을 사용하는 방식에 대한 자세한 내용은 연결 한도와 시간 초과를 참조하세요.
이 프록시를 사용해 액세스하고자 하는 RDS DB 인스턴스나 Aurora DB 클러스터와 연결된 Secrets Manager 보안 암호를 하나 이상 선택하고, 선택한 Secrets Manager 보안 암호에 액세스할 권한이 있는 IAM 역할을 선택합니다. 기존 보안 암호가 없는 경우, [새 보안 암호 생성]을 클릭한 다음, RDS 프록시를 계속 설정하세요.
VPC 서브넷과 보안 그룹을 설정한 다음, [프록시 생성]을 클릭하세요. 설정에 대한 자세한 내용은 설명서를 참조하세요.
몇 분 후 새 RDS 프록시가 표시되며, 그러면 애플리케이션을 이 RDS Proxy 엔드포인트에 연결되도록 지정할 수 있습니다. 이게 다입니다!
또한 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]
RDS Proxy 작동 방식
데이터베이스를 재부팅할 때 또는 문제가 발생하여 데이터베이스를 사용하지 못할 때 장애 조치 중에도 열려 있는 연결이 계속 작동하는 원리를 나타낸 예제를 살펴보겠습니다. 이 예제에서는 channy-proxy
라는 이름의 프록시와 instance-8898
및 instance-9814
라는 DB 인스턴스를 포함한 Aurora DB 클러스터를 사용하였습니다. Linux 명령줄에서 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 rows 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 rows 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 rows in set (0.01 sec)
+---------------+---------------+
| Variable_name | Value |
+---------------+---------------+
| hostname | ip-10-1-3-178 |
+---------------+---------------+
1 row in set (0.02 sec)
RDS Proxy를 사용하면 복잡한 오류 처리 코드를 쓰지 않아도 데이터베이스 오류를 투명하게 허용하는 애플리케이션을 구축할 수 있습니다. RDS Proxy는 애플리케이션 연결을 보존하면서 트래픽을 새 데이터베이스 인스턴스로 자동 라우팅합니다.
RDS Proxy 개요 데모를 검토하여 Lambda 함수에서 RDS Proxy에 액세스하는 데 필요한 단계를 확인하세요.
부하가 최고치에 달했을 때도 서버리스 애플리케이션이 우수한 성능을 그대로 유지하는 원리가 궁금하다면 이 블로그 게시물을 읽어보세요. 서버리스로 RDS Proxy for MySQL을 사용하는 방법을 심층적으로 알아보고자 한다면 이 게시물을 확인하세요.
다음 내용은 알아두어야 할 몇 가지 사항입니다.
- 현재 RDS Proxy는 MySQL 및 PostgreSQL 엔진 제품군에서 사용할 수 있습니다. 이러한 엔진 제품군에는 RDS for MySQL 5.6 및 5.7, PostgreSQL 10.11 및 11.5 등이 포함됩니다.
- Aurora 클러스터의 경우, 연결 풀에 속한 모든 연결을 Aurora 기본 인스턴스가 처리합니다. 읽기 집약적인 워크로드의 로드 밸런싱을 수행하려면 여전히 Aurora 클러스터의 리더 엔드포인트를 사용합니다.
- RDS Proxy가 데이터베이스와 같은 VPC에 속해야 합니다. 데이터베이스에는 공개적으로 액세스할 수 있으나 프록시에는 불가능합니다.
- 프록시는 압축 모드를 지원하지 않습니다. 예를 들어 프록시는
mysql
명령의--compress
또는-C
옵션에서 사용하는 압축을 지원하지 않습니다.
정식 출시!
Amazon RDS Proxy는 현재 Aurora MySQL, RDS for MySQL, Aurora PostgreSQL 및 RDS for PostgreSQL에 대해 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(캘리포니아 북부), 미국 서부(오레곤), 유럽(프랑크푸르트). 유럽(아일랜드), 유럽(런던), 아시아 태평양(뭄바이), 아시아 태평양(서울), 아시아 태평양(싱가포르), 아시아 태평양(시드니) 및 아시아 태평양(도쿄) 리전에서 사용할 수 있습니다.
자세한 내용은 제품 페이지, 요금 및 설명서를 참조하세요. Amazon RDS에 대한 피드백이 있으면 AWS 포럼이나 AWS 지원 담당자에게 보내주시기 바랍니다.
– Channy;