Amazon RDS と Aurora

Amazon RDS(Relational Database Service)は、MySQL や PostgreSQL などのリレーショナルデータベースを AWS が管理してくれるサービスです。Aurora は AWS が作った RDS の仲間のデータベースです。SAA では「止まらないようにする(マルチ AZ)」と「読み取りをさばく(リードレプリカ)」の使い分けが頻出です。

ひとことで言うと: バックアップやパッチ当てを AWS に任せられる、管理付きのデータベースです。

たとえるなら、マルチ AZ は「本番担当が倒れたらすぐ代われる控えの担当者(マルチ AZ DB インスタンスの場合、ふだんは接客しない)」、リードレプリカは「問い合わせ窓口だけを手伝う応援スタッフ」です。

このページで押さえる論点

RDS の基本

RDS では、データベースを動かすサーバーを DB インスタンスと呼びます。OS やデータベースソフトの更新、自動バックアップなどを AWS が行うので、利用者はテーブル設計やクエリ(問い合わせ)に集中できます。一方で、データベースの中のデータ、DB ユーザーの権限、クエリのチューニングは利用者の責任です。

アプリは、DB インスタンスの IP アドレスではなくエンドポイント(接続先の DNS 名。例: mydb.xxxx.ap-northeast-1.rds.amazonaws.com)に接続します。障害で裏側の DB が入れ替わっても、エンドポイントの名前は変わりません。

管理項目EC2 に自分で DB を入れる場合Amazon RDS
OS・DB エンジンのパッチ適用利用者AWS
バックアップ利用者が仕組みを作るAWS(自動バックアップ)
障害時の切り替え利用者が設計・実装AWS が自動(マルチ AZ 構成時)
データ・DB ユーザーの管理利用者利用者

高可用性: マルチ AZ 配置

マルチ AZ 配置は、別の AZ(独立したデータセンター群)に控えの DB を置き、障害時に自動で切り替える(フェイルオーバーする)構成です。RDS には次の 2 種類があり、スタンバイを読み取りに使えるかどうかが違います。試験では「マルチ AZ」とだけ書かれていることも多いので、どちらの話かを見分けます。

項目マルチ AZ DB インスタンスマルチ AZ DB クラスター
スタンバイの数1 台(別の AZ)2 台(ライター 1 台と合わせて 3 つの AZ に配置)
スタンバイで読み取りできるかできない(フェイルオーバー専用)できる(読み取りトラフィックを処理できる)
コピーの方式同期レプリケーション準同期レプリケーション(少なくとも 1 台のリーダーの受信確認を待ってから書き込み完了)
フェイルオーバーの時間通常 60〜120 秒リーダーのレプリカの遅れによって変わる

同期レプリケーションとは、書き込みのたびにプライマリとスタンバイの両方へ書いてから完了とする方式です。切り替えてもデータが失われません。フェイルオーバーでは、エンドポイントの DNS レコードが新しいプライマリを指すように切り替わるので、アプリは接続先の設定を変えずに再接続するだけで済みます。

下の図は、試験でよく出るマルチ AZ DB インスタンス配置の動きです。

再生型アニメ図解

マルチ AZ DB インスタンスのフェイルオーバー

アプリ エンドポイント AZ-a AZ-c 同期 ✕ 障害 ✕ 読み取り不可 ✓ 自動で昇格

※簡略化しています: 「マルチ AZ DB インスタンス配置」(スタンバイ 1 台)を図にしています。読み取りにも使えるスタンバイを 2 台持つ「マルチ AZ DB クラスター配置」もありますが省略しています。切り替え時間(通常 60〜120 秒)は一瞬で描いています。

読み取りの拡張: リードレプリカ

リードレプリカは、プライマリのデータを非同期レプリケーション(書き込み完了を待たず、少し遅れてコピーする方式)で受け取る読み取り専用のコピーです。読み取りの多いアプリや、集計・レポート用のクエリを本番から切り離したいときに使います。アプリ側で、読み取りのクエリをリードレプリカのエンドポイントに向ける必要があります。

リードレプリカは別の AZ や別のリージョンにも作れます。プライマリに障害が起きても自動では昇格しませんが、手動で昇格させると独立した DB インスタンスになり、書き込みもできるようになります。マルチ AZ 配置の DB インスタンスにリードレプリカを追加することもできるので、「可用性」と「読み取り性能」の両方が必要なら両方を組み合わせます。

項目マルチ AZ DB インスタンス(スタンバイ)リードレプリカ
主な目的可用性(止まらないこと)読み取り性能の向上
コピーの方式同期(データの取りこぼしがない)非同期(少し遅れて反映されることがある)
読み取りに使えるか使えない使える(読み取り専用)
障害時の切り替え自動でフェイルオーバー自動では昇格しない(手動で昇格)
置き場所同じリージョンの別の AZ同じ AZ・別の AZ・別のリージョン

非同期なので、リードレプリカのデータはプライマリより少し遅れることがあります(レプリカラグ)。書き込んだ直後の値を必ず読みたい処理はプライマリから読みます。

操作できるシミュレーター

読み取りを増やす・AZ 障害を起こすとどうなるか

設定: 書き込みは毎秒 30 件で固定。DB 1 台は毎秒 100 件まで処理できると仮定します。構成を切り替えて、読み取りの量と AZ 障害の影響を比べてみましょう。

アプリ AZ-a AZ-c
構成

※簡略化しています: 負荷は「処理件数 ÷ 1 台の処理能力」で計算し、切り替えにかかる時間やレプリカの遅れ(レプリカラグ)は数値に含めていません。リードレプリカ構成では、アプリが読み取りをすべてレプリカのエンドポイントに送る想定です。実際にはマルチ AZ とリードレプリカを両方使う構成もよく使われます。

Aurora のしくみ

Aurora は MySQL・PostgreSQL と互換性のあるデータベースで、計算(DB インスタンス)とストレージ(データの保存先)が分かれているのが特徴です。データは 1 つのクラスターボリュームに保存され、書き込みのたびに 3 つの AZ にまたがる 6 つのストレージノードへ同期でコピーされます。DB インスタンスが何台でも、このコピーの数は変わりません。クラスターボリュームはデータ量が増えると自動で拡張されるので、容量を前もって確保しておく必要はありません。

書き込み用のプライマリに加えて、読み取り用の Aurora レプリカを最大 15 台置けます。レプリカは同じクラスターボリュームを読むので、データを丸ごとコピーせずに追加できます。プライマリに障害が起きるとレプリカの 1 台が自動で昇格し、通常 60 秒未満(多くは 30 秒未満)で復旧します。レプリカがない場合はプライマリを作り直すため、通常 10 分未満かかります。

エンドポイント接続先と用途
クラスターエンドポイントプライマリ(ライター)に接続。書き込みを含む処理に使う
リーダーエンドポイントAurora レプリカ全体に接続を振り分ける。読み取りの分散に使う
カスタムエンドポイント自分で選んだ一部のインスタンスに接続。性能の違うインスタンスを用途別に分けたいときに使う
インスタンスエンドポイント特定の 1 台に接続。診断やチューニング用

リージョン障害への備え

マルチ AZ はリージョン内の AZ 障害への備えで、リージョン全体が使えなくなる災害には対応できません。別リージョンにデータを置くには次の方法があります。災害対策(DR)の設計では、RPO(目標復旧時点。何秒・何分前までのデータを取り戻せればよいか)と RTO(目標復旧時間。どれくらいで復旧すればよいか)で方式を選びます。

方法しくみRPO・RTO の目安
RDS のクロスリージョンリードレプリカ別リージョンに非同期でコピー。災害時に手動で昇格させて書き込みを再開レプリカの遅れ分のデータを失う可能性がある。昇格は手動
Aurora Global Database1 つのプライマリリージョンから、最大 10 のセカンダリリージョンのクラスターへ専用の仕組みでコピー(通常 1 秒未満の遅れ)。セカンダリは読み取り専用障害時のフェイルオーバー: RPO は通常秒単位、RTO は分単位。計画的な切り替え(スイッチオーバー)なら RPO は 0
スナップショットを別リージョンへコピーバックアップを別リージョンに置き、災害時に復元最後のバックアップ以降のデータを失い、復元にも時間がかかる

Aurora Global Database のセカンダリリージョンは読み取り専用なので、世界各地のユーザーに近い場所で読み取りを速くする目的にも使えます。

容量の変動への対応

Aurora Serverless v2 は、アプリの負荷に合わせて Aurora の DB インスタンスの容量を自動で増減する設定です。容量は ACU(Aurora キャパシティーユニット。1 ACU は約 2 GiB のメモリと、それに見合う CPU・ネットワーク)で表し、0.5 ACU 単位の細かさで調整されます。エンジンのバージョンによっては最小を 0 ACU にでき、使われていない間は自動で一時停止します。アクセス量の予測がつかない、急に増えることがある、夜間はほとんど使わない、といったワークロードに向きます。同じクラスターの中で、通常の(プロビジョンド)インスタンスと Serverless v2 のインスタンスを混ぜることもできます。

RDS のストレージの自動スケーリングを有効にすると、空き容量が少なくなったときに自動でストレージを増やします。空き容量が割り当て容量の 10% 未満の状態が 5 分以上続く、などの条件を満たすと拡張され、上限は利用者が決める「最大ストレージしきい値」までです。容量不足で DB が止まるのを防ぎたいが、手作業の監視はしたくない、という要件で選びます。

接続の管理: RDS Proxy

RDS Proxy は、アプリと DB の間に置く接続の中継役です。DB への接続をプール(あらかじめ用意した接続を使い回すこと)して共有するので、毎回接続を作り直す負荷を減らせます。Lambda のように短時間で大量の接続を作るアプリや、予測できない急なアクセス増で DB の接続数があふれそうな場合に使います。

フェイルオーバーのときも、RDS Proxy がアプリからの接続を保ったまま新しい DB に接続し直すので、アプリへの影響が小さくなります。DB のユーザー名とパスワードは AWS Secrets Manager(認証情報を安全に保管するサービス)に置き、アプリは IAM 認証で RDS Proxy に接続する、という構成にもできます。

セキュリティ: 暗号化と IAM データベース認証

RDS の保管時の暗号化は AWS KMS(暗号化キーを管理するサービス)のキーで行い、DB のストレージだけでなく自動バックアップ・リードレプリカ・スナップショットもまとめて暗号化されます。

IAM データベース認証を使うと、DB 接続にパスワードではなく、IAM の権限で発行される認証トークン(有効期限 15 分)を使えます。DB ユーザーのパスワードを DB やアプリに保存しなくて済みます。対応エンジンは MariaDB・MySQL・PostgreSQL です。

バックアップと復元

RDS の自動バックアップは、毎日の DB のバックアップに加えて、トランザクションログ(変更の記録)を 5 分ごとに S3 へ保存します。これにより、保持期間内の好きな時点に戻すポイントインタイムリカバリができます。

方法保持期間特徴
自動バックアップ0〜35 日(0 にすると自動バックアップが無効。既定はコンソールで 7 日、API・CLI で 1 日)保持期間内の任意の時点に復元できる
手動スナップショット利用者が削除するまで残る保持期間を超えて長く残したいバックアップや、別リージョン・別アカウントへのコピーに使う

復元すると、元の DB を上書きするのではなく新しい DB インスタンスが作られます。アプリの接続先を新しいエンドポイントに切り替える必要がある点に注意します。「35 日より長く保管したい」という要件は、自動バックアップではなく手動スナップショットで満たします。

データベースの選び方

サービス種類選ぶ場面
Amazon RDSリレーショナル DB(MySQL・PostgreSQL・MariaDB・Oracle・SQL Server など)SQL や JOIN が必要な業務システム。既存の DB エンジンをそのまま移したい
Amazon Auroraリレーショナル DB(MySQL・PostgreSQL 互換)高い可用性・耐久性、速いフェイルオーバー、多数の読み取りレプリカ、リージョンをまたぐ DR が必要
Aurora Serverless v2Aurora の自動スケーリング設定負荷の変動が大きい・予測できないリレーショナル DB
Amazon DynamoDBNoSQL(キーバリュー型)決まったキーでの大量アクセス、スキーマを柔軟にしたい、サーバーレスで運用したい

問題文のキーワード → 選ぶべき答え

問題文の言い回し答えと理由
「AZ 障害でも自動で切り替え」「高可用性」マルチ AZ 配置。スタンバイへ自動でフェイルオーバーする
「読み取りが多い」「レポート用クエリを本番から切り離す」リードレプリカ(Aurora ならリーダーエンドポイント)。読み取りを別の DB に逃がす
「高可用性と読み取りの拡張を 1 つの RDS 構成で」マルチ AZ DB クラスター。2 台のスタンバイが読み取りも処理する
「リージョン全体の障害」「RPO は秒単位、RTO は分単位」Aurora Global Database。別リージョンへ通常 1 秒未満の遅れでコピー
「Lambda から大量の接続」「接続数の上限に達する」RDS Proxy。接続をプールして共有する
「負荷の予測がつかない」「使わない時間のコストを抑えたい」(リレーショナル DB)Aurora Serverless v2。ACU 単位で自動増減する
「既存の暗号化されていない DB を暗号化」スナップショットを暗号化してコピーし、新しい DB に復元。作成後に直接は暗号化できない
「DB のパスワードを保存したくない」IAM データベース認証(15 分有効のトークン)。または Secrets Manager で認証情報を管理
「誤って削除したデータを、数分前の状態に戻したい」ポイントインタイムリカバリ。新しい DB インスタンスとして復元される
「ストレージ不足を運用負荷なしで防ぐ」ストレージの自動スケーリング(Aurora はクラスターボリュームが自動で拡張)

引っかけポイント

まとめ: SAA 試験で押さえるポイント

確認問題

参考リンク

AWS 公式ドキュメント(外部サイトが開きます)。