[アップデート] RPOが短いDR環境も簡単に。暗号化されたRDSインスタンスでもクロスリージョン自動バックアップが利用可能になりました。

RPOの短いDR要件でも簡単に実装できますね。今まで暗号化されたインスタンスでは使えなかったようです。。
2021.05.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本日のアップデートで暗号化された RDS インスタンスでも自動バックアップのクロスリージョンレプリケーションが利用可能になりました。

訂正: 2021/5/5
今回のアップデートで自動バックアップのクロスリージョンレプリケーションが利用可能になったと思っていましたが、ポイントは「暗号化されたインスタンスでもクロスリージョンレプリケーションが利用可能になった」ということのようです。
自動バックアップのクロスリージョンレプリケーションについては以下のとおり、ちょっと前にすでにアップデート対応しておりました。
・[アップデート] RDS for Oracleでクロスリージョン自動バックアップがサポートされました #reinvent
・RDS PostgreSQLがDR用のクロスリージョンバックアップに対応したので東京-大阪リージョン間で試してみた
ということで、本記事は RDS の自動バックアップのクロスリージョンレプリケーション対応をはじめて知ったテンションで執筆されていることを念頭にお楽しみください。

フルマネージドなクロスリージョンバックアップ

従来、RDS のバックアップをクロスリージョンレプリケーションする場合、以下のようなパターンがありました。

  • Amazon EventBridge をトリガーに RDS スナップショットをクロスリージョンコピーする Lambda 関数をユーザー側で実装する
  • AWS Backup で RDS スナップショットのクロスリージョンレプリケーションするバックアッププランを設定する

ここで重要なのは、従来の方式はあくまでスナップショットを複製するものであって、トランザクションログの複製ではないという点です。

以下は AWS Backup の公式ガイド Restoring to a specified time using point-in-time recovery からの引用ですが、トランザクションログのコピーは not support であると明記されています。

AWS Backup does not support on-demand copies of continuous backups. AWS Backup does not support copies of Amazon RDS continuous backups because Amazon RDS does not allow copies of its transaction logs.

トランザクションログのクロスリージョンレプリケーションが実装可能になったことで、RPO が 数十分レベルで求められるようなディザスタリカバリ要件に対しても RDS の標準機能だけで簡単に実装することが可能となりました。

暗号化された DB インスタンスに対応

追記: 2021/5/5
・「暗号化された DB インスタンスに対応」を追記

re:Invent 2020でリリースされた時点では暗号化された DB インスタンスに対応していませんでした。

クロスリージョンレプリケーションを使いたい環境は、本番環境などのミッションクリティカルなデータベースが対象と思われます。一般的に、そのような環境ではセキュリティレベルとして暗号化ストレージも同時に求められることが多いと思いますので実質的に使える環境は少なかったのではないでしょうか、、。

今回のアップデートにより、ようやくクロスリージョンレプリケーションが標準的に利用できる環境が整ったといえると思います。

利用可能 DB エンジン

執筆時点において対応している RDS エンジンは Oracle と PostgreSQL のみです。

  • Oracle version 12.1.0.2.v10 以降
  • PostgreSQL version 9.6 以降

利用可能リージョン

利用可能なリージョンにおいても、特定の宛先リージョンのみが指定可能となっています。

ソースリージョン 宛先リージョン
米国東部(バージニア北部) 米国西部(オレゴン)
米国西部(オレゴン) 米国東部(バージニア北部)
欧州(フランクフルト) 欧州(アイルランド)
欧州(アイルランド) 欧州(フランクフルト)
アジアパシフィック (東京) アジアパシフィック (大阪)

なんということでしょう。

その他のリージョンは相互に利用可能であるのに対し、国内リージョンのみ東京→大阪のパターンしか利用できません。

大阪リージョンを愛するものとして、これは由々しき事態です。一日も早く大阪リージョンをソースリージョンとして利用できることを切に願います。

料金

以下、2 つの利用料金が適用されます。詳細は料金表をご確認ください。

  • データ転送料金
  • スナップショットおよびトランザクションログのデータ転送に対して課金
  • ストレージ標準料金
  • 宛先リージョンで保存するスナップショットに対して課金
  • トランザクションログに対して追加のストレージ料金は発生しません

やってみる

それでは検証環境を利用して、実際の動作を確認してみましょう。今回の検証環境は以下のとおりです。

  • ソースリージョンは渋々東京リージョン
  • PostgreSQL 12.5-R1
  • db.t3.micro
  • 暗号化ストレージ

Backup replication の有効化

新規作成時にも指定可能ですが、今回は未設定状態の既存インスタンスを想定した検証です。

RDS 管理コンソールから対象のインスタンスを選択し、[変更] をクリック。インスタンスの変更メニューの [追加設定] - [バックアップ] に Backup replication が追加されています。

Enable replication in another AWS Region にチェックを入れると、対象リージョンおよびバックアップ保持期間の設定メニューが表示されますので、これを指定します。ストレージ暗号化を有効にしている場合、マスターキーの入力欄が必要となります。(マスターキーを入力しない場合、エラーにはなりませんがレプリケーション設定は反映されませんでした)

指定が完了したら、そのままインスタンスの変更を完了します。しばらくするとインスタンスの変更が反映されますので[メンテナンスとバックアップ] - [バックアップ] を確認します。以下のように Replicate to Region および Replicated automated backup が追加されています。

レコード挿入

それではソース側の RDS で適当なレコードを挿入します。

testdb=> CREATE TABLE products (product_no integer, name text, price numeric);
CREATE TABLE
testdb=> INSERT INTO products VALUES (1, 'Cheese', 9.99);
INSERT 0 1
testdb=> SELECT * from products;
 product_no |  name  | price 
------------+--------+-------
          1 | Cheese |  9.99
(1 row)

testdb=> select CURRENT_TIMESTAMP;
       current_timestamp       
-------------------------------
 2021-05-04 11:03:16.215661+00
(1 row)

ポイントインタイムリカバリ

RDS 管理コンソールを大阪リージョンに切り替え、[Automated backups] - [Replicated] タブを確認すると、以下のようにレプリケーションされたバックアップが表示されています。[最も遅い復元可能な時刻] が May 04, 2021, 11:06:59 AM UTC となっていますので、先ほどレコード挿入した内容が反映されているはずです。

このスクリーンショットは 11:22 AM UTC に取得しているので、おおよそ 15 分程度のラグでした。(あくまで参考値として)

[アクション] - [特定時点への復元] をクリックして復元します。ポイントインタイムリカバリの設定内容は通常の手順になりますので、今回は割愛します。

データの確認

ポイントインタイムリカバリが完了しましたので、内容を確認してみましょう。

$ psql -h database-2.cqzazat13hbm.ap-northeast-3.rds.amazonaws.com -U postgres -d testdb
Password for user postgres:
psql (9.2.24, server 12.5)
WARNING: psql version 9.2, server version 12.0.
         Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

testdb=> SELECT * from products;
 product_no |  name  | price
------------+--------+-------
          1 | Cheese |  9.99
(1 row)

東京リージョンで挿入したレコードが復元されていることが確認できましたね!

検証は以上です。

まとめ

  • RDS の自動バックアップで暗号化されたクロスリージョンリプリケーションが可能になりました
  • 数十分レベルの RPO が求められるディザスタリカバリ要件なら簡単に実装可能
  • 検証環境では、おおよそ 15分 のラグ(参考値)
  • 利用可能な RDS エンジンは Oracle と PostgreSQL のみ
  • 料金はリージョン間のデータ転送(スナップショットおよびトランザクションログ)と、宛先リージョンのストレージ料金(スナップショットのみ)
  • レプリケーション可能なリージョンの組み合わせがあります
  • バージニア ⇔ オレゴン
  • フランクフルト ⇔ アイルランド
  • 東京 ⇒ 大阪
  • 大阪リージョンもソースリージョンで利用できるように AWS にフィードバックする

以上!大阪オフィスの丸毛(@marumo1981)でした!