本日は、Amazon Relational Database ServiceチームのSrikanth Deshpandeが、Amazon RDS for PostgreSQLに追加されたリードレプリカ、データ移行機能のアップデート、3つの拡張モジュールなどの最新かつすばらしい機能を紹介します。
-- Jeff(翻訳版は江川が担当しました)
リードレプリカ
このたび、Amazon RDS for PostgreSQLは、需要が高いRDS機能であるリードレプリカをサポートします。この機能により、参照比率が高く、高トラフィックを誇るウェブ、モバイルアプリケーションの要件を満たすべく、PostgreSQLを使用するお客様が簡単にデータベースをスケールアウトすることができます。
この機能により、PostgreSQLデータベースインスタンスの複数のコピー、いわゆる、レプリカを作成でき、参照トラフィックをそのレプリカに分散させることにより、アプリケーションをスケールさせることができます。 リードレプリカ作成後、このレプリカは、PostgreSQLの非同期ストリーミングレプリケーションを使用して、同期し続けます。 また、AWS マネジメントコンソール、AWS コマンドラインインターフェイス (CLI)、RDSのAPIを使用して、数分でレプリカの作成や削除が容易にできます。 一度レプリカを作成すると、PostgreSQLの非同期ストリーミングレプリケーションを使用して、データをコピーし続けます(非同期であるため、場合によっては、マスタへの書き込み後、リードレプリカへの反映までにタイムラグが発生する可能性があります)。Amazon RDSはレプリカに反映するまでのライムラグを監視する機能を提供するので、必要に応じでアプリケーションを調整することができます。リードレプリカは、Multi-AZと併せて使用できます。これにより、参照スケーラビリティの利点とMulti-AZデプロイメントによる耐障害性、可用性の利点を同時に享受できます。
リードレプリカを作成するには、マネジメントコンソールから更新を行うマスタを選択し、[Instance Actions]のメニューから[Create Read Replica]をクリックします。

詳細を入力し、[Create Read Replica]ボタンをクリックします。

現在使用しているインスタンスで、リードレプリカを使用するためには、PostgreSQLのバージョンを9.3.5にアップグレードする必要があります。幸運なことに、AWS マネジメントコンソール、APIを使用して、数分でアップグレードできます。それから、スケールアウトが可能です。PostgreSQL9.3.5とともに、PostGISのバージョンも2.1.3へアップグレードされます。
お客様の声
お客様がどのようにAmazon RDS for PostgreSQLを利用しているかをより理解するため、そして、リードレプリカをどのように使うつもりか感触を伺うため、2社のお客様に対してインタビューを行いました。
Flipagramは、iOSのAppストアとGoogle Playにて、トップ100のモバイルアプリに選ばれました。彼らは、ユーザーに対して、写真を使ったビデオ動画の作成や共有ができるプラットフォームを提供しています。創設者かつCTOのBrian Dilleyにインタビューしました。以下は、彼が私に話したことです。
私たちが、RDS PostgreSQLを使い始め、それをスケールアップさせてきたのは、非常に小さいチームで、RDS PostgreSQLの管理業務やコンピュート、ストレージ、I/Oスケーラビリティーをレバレッジさせることにより、多くのユーザーからの負荷を支えるためです。 私たちは、可用性を高めるためにMulti-AZを使い、マネジメントコンソール上でチェックボックスをオンにするだけで、商用ワークロードに高可用性を持たせることができる能力を愛しています。私たちは、商用環境、検証環境、テスト/開発環境のすべてでRDS PostgreSQLを実行しています。2013年12月、80か国のAppストアでNo.1になったとき、非常に大きなスパイクが発生するトラフィックに対応するために、RDSを使用し、ワンクリックでインフラストラクチャをスケールさせることで乗り切れました。私たちがユーザーに対して素敵な体験をしてもらうことにフォーカスする限り、サービスが成長するにつれて大きくなる参照トラフィックにあわせてスケールするようにリードレプリカを使うのが楽しみになってきます。
E la Carteは、サービス開始以来、Amazon RDS for PostgreSQLを使い続けています。彼らのPrestoタブレットは、スマートデザイン時代の到来を示しています。 Bill Healey (E la CarteのCTO)は次のように語ってくれました。
RDS Postgresを使用するまで、非常に大きなエンジニアリングリソースが必要になるPostgreSQLインスタンスを自分たちで管理してきました。しかし、RDSにより、速く、容易に、レプリケーションさせ、データベースサイズ、IOPSともにスケールアップさせることができるようになりました。私たちは、ずっとRDS Postgresにリードレプリカ機能が追加されることを楽しみにしていました。E la Carteは、まさにデータドリブンで、常に商用DBのデータから直接データ解析しつつ、データウェアハウスによる集積データの解析を行っています。私たちは、データウェアハウスのETLツールとデータ解析ツールの性能を高めて、RDS商用インスタンスへの負荷を下げるために、RDSリードレプリカを使うことを楽しみにしています。
トリガーベースのレプリケーション
このたび、RDS PostgreSQLは、レプリケーション権限をサポートします。 RDSでは、この権限をLondisteやBucardoのようなオープンソースのトリガベースツールと併せて使用することができます。これらは、わずかなダウンタイムでRDS for PostgreSQLの外部へ、もしくは外部から既存のデータを移行するために利用できます。
データインポート(Londiste)
Londisteを使ってデータをインポートするためには、(RDSではない)外部のPostgreSQLインスタンスにそれをインストールし、RDS PostgreSQLインスタンスをレプリカとしてセットアップし、レプリケーション権限を有効にする必要があります。 Londisteは始めに既存のデータベースからデータをダンプし、RDSのPostgreSQLインスタンスにデータをロードします。これは、外部のPostgreSQLインスタンスが更新トラフィックを受付ながら実行されます。それが終わった後、RDSインスタンスは、その間に外部DBで行われていた更新に追いついていくでしょう。一度、RDSインスタンスが既存のデータベースと同じ状態になれば、ダウンタイムが最小になる時間を選んで、実行しているアプリケーションのアクセス先をRDS PostgreSQLインスタンスにすることができます。
データエクスポート(Bucardo)
また、レプリケーション権限をRDS for PostgreSQLインスタンスからオンプレミスやEC2上の外部のPostgreSQLへのデータエクスポートするためにも使用できます。これを実現するには様々な方法があります。たとえば、トリガーベースの楽観的レプリケーションを実現するオープンソースソリューションであるBucardoを外部のインスタンスにインストールし、RDS PostgreSQLをマスターインスタンスとするレプリケーションのスレーブとしてセットアップできます。Bucardoは、外部のインスタンスがオンラインである限り、RDSインスタンスにあるデータを外部のインスタンスに複製します。楽観的レプリケーションであるため、外部のインスタンスがオフラインになり、オンラインに戻ったとしても、Bucardoは、外部のインスタンスが結果的に整合性をとることを保証します。
新しい拡張モジュール
リードレプリカ、PostgreSQL 9.3.5のサポート、トリガベースのレプリケーションに加えて、需要が高い3つのPostgreSQL拡張モジュールをサポートします。
- pg_stat_statements - pg_stat_statementsは、SQL文を実行したuserid、SQL文の文字列、SQL文の処理に費やした総時間などのインスタンスで実行されたすべてのSQL文の実行時の統計情報を記録する手段を提供します。
- postgres_fdw - postgres_fdwは、他のRDS PostgreSQLインスタンスにあるテーブルのような外部のPostgreSQLサーバーにあるデータの参照、更新を行う機能を提供します。
- PL/V8 - これは、V8 JavaScriptエンジンが組み込まれたPostgreSQLの手続き言語の外部モジュールです。この拡張モジュールによって、SQLから呼び出せるJavaScriptの関数を書くことができます。
これらの拡張モジュールを利用するには、AWSマネジメントコンソールやAPIを使って、新しいインスタンスを作成するか、既存のインスタンスをアップグレードする必要があります。
Amazon RDS for PostgreSQLのページには、これらの新機能を使うために必要な技術情報、料金に関わる情報が記載されています。
-- Srikanth Deshpande, Amazon RDS シニアプロダクトマネージャー -- 江川