Amazon Web Services ブログ

Amazon RDS Proxy の一般提供を開始

AWS re:Invent 2019 において、Amazon RDS Proxy のプレビューの提供を開始しました。これは、Amazon Relational Database Service (RDS) のフルマネージドで可用性の高いデータベースプロキシであり、アプリケーションのスケーラビリティ、データベース障害への耐性、そして安全性を向上させるものです。MySQL エンジンのプレビューに続き、PostgreSQL 互換にまで拡張しました。本日より、両方のエンジンで一般提供を開始します。

AWS LambdaFargateAmazon ECS、または EKS を使用する最新のサーバーレスアーキテクチャで構築されたアプリケーションを含む多くのアプリケーションは、データベースサーバーへの多数の開いた接続を持ち、データベース接続を高速で開閉し、大量のデータベースメモリやコンピューティングリソースを消費しています。

Amazon RDS Proxy を使用すると、データベースで確立された接続をアプリケーションでプールおよび共有できるため、データベースの効率、アプリケーションのスケーラビリティ、およびセキュリティが向上します。RDS Proxy を使用すると、Amazon Aurora および RDS データベースのフェイルオーバー時間が最大 66% 削減され、データベースの認証情報、認証、およびアクセスは、AWS Secrets Manager および AWS Identity and Access Management (IAM) との統合により管理できます。

Amazon RDS Proxy は、ほとんどのアプリケーションでコードを変更することなく有効にできます。追加のインフラストラクチャをプロビジョニングまたは管理する必要はなく、プロキシが有効になっているデータベースインスタンスの vCPU ごとに支払うだけです。

Amazon RDS Proxy – 開始方法
AWS マネジメントコンソールに移動し、RDS データベースの RDS Proxy エンドポイントを作成することで、数回クリックするだけで Amazon RDS Proxy を開始できます。ナビゲーションペインで、[プロキシ]、[プロキシを作成] の順に選択します。以下のプロキシパネルも表示されます。

プロキシを作成するには、任意の一意の名前であるプロキシ識別子を指定し、データベースエンジン (MySQL または PostgreSQL) を選択します。プロキシでアプリケーションとプロキシ間のすべての接続に TLS/SSL を強制する場合は暗号化設定を選択し、プロキシがクライアント接続を閉じるまでにクライアント接続がアイドル状態でいられる期間を指定します。

前のリクエストが完了してから指定された時間内にアプリケーションが新しいリクエストを送信しなかった場合、クライアント接続はアイドル状態であるとみなされます。プロキシとデータベース間の基礎接続は開いたままで、接続プールに返されます。したがって、新しいクライアント接続に再利用できます。

次に、このプロキシ経由でアクセスするために、[データベース] で RDS DB インスタンスまたは Aurora DB クラスターを 1 つ選択します。リストには、互換性のあるデータベースエンジン、エンジンバージョン、およびその他の設定を持つ DB インスタンスとクラスターのみが含まれます。

[接続プールの最大接続数] を 1〜100 の値で指定します。この設定は、RDS Proxy が接続に使用できる max_connections 値の割合を表します。この DB インスタンスまたはクラスターで 1 つのプロキシのみを使用する場合は、100 に設定できます。RDS Proxy がこの設定を使用する方法の詳細については、接続の制限とタイムアウトの制御を参照してください。

このプロキシを使用してアクセスする RDS DB インスタンスまたは Aurora DB クラスターに関連付けられた少なくとも 1 つの 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 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
$ # 最初は、instance-9814 がライターです。
$ aws rds failover-db-cluster --db-cluster-id cluster-56-2019-11-14-1399
JSON output
$ # しばらくすると、コンソールにフェイルオーバー操作が完了したことが表示されます。
$ # この時点で instance-8898 がライターとなります。
$ 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
$ # しばらくすると、コンソールにフェイルオーバー操作が完了したことが表示されます。
$ # ここで instance-9814 が再びライターとなります。
$ 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 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;