RDS 運用 ハンズオン

本番 DB の運用を体験する ― Multi-AZ フェイルオーバー・バックアップ・復元・Read Replica・Performance Insights

Amazon RDS Multi-AZ スナップショット Read Replica Performance Insights マネコン操作 所要時間 90〜120 分 v1.0

📋 概要

Amazon RDS は、フルマネージドなリレーショナルデータベースサービスです。このハンズオンでは、本番運用に欠かせない可用性・バックアップ・復元・スケール・監視の各機能を実際に操作します。Multi-AZ の手動フェイルオーバー、スナップショットからの復元、Read Replica による読み取り分散、Performance Insights によるボトルネック分析を体験します。

項目内容
対象サービスAmazon RDS(PostgreSQL)、CloudWatch、Performance Insights
主な学習内容Multi-AZ / フェイルオーバー / バックアップ / スナップショット復元 / Read Replica / 性能分析
所要時間90〜120 分(RDS の作成・復元待機が長め)
難易度★★★☆☆(中級者向け)
前提知識RDS の基礎・SQL の基本・VPC / サブネットの概念
費用目安約 1〜3 USD(db.t3.micro Multi-AZ + Replica を短時間。終了後は必ず削除)
⚠️ 課金に注意

Multi-AZ・Read Replica は通常の 2 倍以上のインスタンス費用がかかります。ハンズオン終了後は必ずすべてのインスタンス・スナップショットを削除してください。

🏗️ アーキテクチャ

📝 書き込み(アプリ / psql)
🟦 プライマリ DB(AZ-a)
handson-rds(同期レプリケーション)
↕ 同期 / フェイルオーバー
🟦 スタンバイ DB(AZ-c)
Multi-AZ:障害時に自動昇格
↓ 非同期レプリケーション
🟩 Read Replica(読み取り専用)
handson-rds-replica:読み取りクエリを分散

Multi-AZ と Read Replica の違い(重要)

項目Multi-AZ スタンバイRead Replica
目的可用性(HA)読み取りスケール
レプリケーション同期非同期
通常時のアクセス不可(待機のみ)読み取り可能
障害時自動フェイルオーバー手動昇格が必要

✅ 前提条件

ℹ️ 既存の RDS を流用しても OK

ポータルの「CloudFormation 環境構築キット(cfn-base)」のスタック A をデプロイすると、Multi-AZ の handson-rds が既に作られます。それを使えばステップ 1 の作成を省略できます。

🟦 ステップ 1 ― Multi-AZ DB の作成とフェイルオーバー

1-1. RDS インスタンスを作成(既存があれば省略)

「RDS」→「データベースの作成」 をクリックします。

設定項目設定値
作成方法標準作成
エンジンPostgreSQL 16
テンプレート開発/テスト
可用性マルチ AZ DB インスタンス
識別子handson-rds
インスタンスクラスdb.t3.micro
ストレージ20 GB gp3
マスターユーザーadmin / 任意のパスワード
パブリックアクセスなし(CloudShell/EC2 から接続)
自動バックアップ有効・保持期間 1 日

「データベースの作成」をクリックします(作成完了まで 10〜15 分)。

1-2. テストデータを投入

CloudShell から接続してテーブルとデータを作成します。

psql -h handson-rds.xxxx.ap-northeast-1.rds.amazonaws.com -U admin -d postgres -- 接続後 CREATE TABLE items(id serial PRIMARY KEY, name text); INSERT INTO items(name) SELECT 'item-'||g FROM generate_series(1,1000) g; SELECT count(*) FROM items;
1-3. 手動フェイルオーバーを実行

RDS → handson-rds を選択 → 「アクション」→「再起動」「フェイルオーバーで再起動」 を選択します(または「アクション」→「Reboot」でフェイルオーバーオプションにチェック)。

プライマリとスタンバイの AZ が入れ替わります。「設定」タブでアベイラビリティーゾーンが変わったことを確認します。

✅ 確認ポイント

フェイルオーバー中も同じエンドポイントで再接続でき、items テーブルのデータが保持されていることを確認します。エンドポイント名は変わらず、裏側で AZ が切り替わるのが Multi-AZ の利点です。「イベント」タブにフェイルオーバーの記録が残ります。

📸 ステップ 2 ― スナップショットの取得

2-1. 手動スナップショットを作成

RDS → handson-rds を選択 → 「アクション」→「スナップショットの取得」 をクリックします。

スナップショット名handson-rds-snap-01

「スナップショットの取得」をクリックします。「スナップショット」メニューでステータスが「利用可能」になるまで待ちます。

ℹ️ 自動バックアップと手動スナップショットの違い
項目自動バックアップ手動スナップショット
取得毎日自動 + トランザクションログ任意のタイミングで手動
保持最大 35 日(自動削除)明示的に削除するまで永続
復元ポイントインタイムリカバリ可取得時点に復元
✅ 確認ポイント

「スナップショット」→「手動」タブに handson-rds-snap-01 が「利用可能」で表示されれば成功です。

♻️ ステップ 3 ― スナップショットからの復元

スナップショットは「新しいインスタンス」として復元されます(上書きではありません)。

3-1. スナップショットを復元

handson-rds-snap-01 を選択 → 「アクション」→「スナップショットを復元」 をクリックします。

新しい識別子handson-rds-restored
インスタンスクラスdb.t3.micro
可用性シングル AZ(コスト節約)

「DB インスタンスを復元」をクリックします(10 分前後)。

3-2. 復元したインスタンスを検証

復元された handson-rds-restored のエンドポイントに接続し、スナップショット取得時点のデータがあることを確認します。

psql -h handson-rds-restored.xxxx.ap-northeast-1.rds.amazonaws.com -U admin -d postgres -c "SELECT count(*) FROM items;" -- => 1000 が返れば復元成功
ℹ️ ポイントインタイムリカバリ(PITR)

自動バックアップが有効なら、スナップショットなしでも 「アクション」→「特定の時点への復元」 で 5 分前など任意の時刻に復元できます(保持期間内)。誤った DELETE 直前への巻き戻しに有効です。

✅ 確認ポイント

復元インスタンスで items が 1000 件あれば成功です。元の DB とは独立した別インスタンスである点を理解しましょう。

🟩 ステップ 4 ― Read Replica で読み取りを分散

4-1. リードレプリカを作成

RDS → handson-rds を選択 → 「アクション」→「リードレプリカの作成」 をクリックします。

識別子handson-rds-replica
インスタンスクラスdb.t3.micro

「リードレプリカの作成」をクリックします。

4-2. レプリケーションを確認

プライマリにデータを追加し、レプリカに反映されることを確認します。

# プライマリに書き込み psql -h handson-rds.xxxx... -U admin -d postgres -c "INSERT INTO items(name) VALUES('replicated-row');" # レプリカで読み取り(数秒後) psql -h handson-rds-replica.xxxx... -U admin -d postgres -c "SELECT * FROM items WHERE name='replicated-row';"

レプリカへの書き込みを試みると cannot execute INSERT in a read-only transaction エラーになることも確認します(読み取り専用)。

4-3. レプリカを単独 DB に昇格(任意)

handson-rds-replica「アクション」→「昇格」 でレプリカを独立した読み書き可能な DB に昇格できます。災害復旧(別リージョンレプリカの昇格)などで使うパターンです。

✅ 確認ポイント

プライマリへの書き込みがレプリカで読めること、レプリカへの書き込みが拒否されることを確認できれば成功です。CloudWatch の ReplicaLag メトリクスで遅延も確認できます。

📊 ステップ 5 ― Performance Insights で性能分析

5-1. Performance Insights を有効化

RDS → handson-rds「変更」 →「モニタリング」セクションで 「Performance Insights を有効化」 にチェックを入れて保存します(保持 7 日は無料)。

5-2. 負荷をかけてみる

CloudShell から重めのクエリを繰り返し実行して負荷を生成します。

psql -h handson-rds.xxxx... -U admin -d postgres -c " DO \$\$ BEGIN FOR i IN 1..50 LOOP PERFORM count(*) FROM items a CROSS JOIN items b; END LOOP; END \$\$;"
5-3. ダッシュボードを確認

RDS 左メニュー 「Performance Insights」 を開き、handson-rds を選択します。

  • DB ロード(AAS):平均アクティブセッション数の推移
  • 上位 SQL:負荷の高いクエリ(CROSS JOIN が上位に出る)
  • 待機イベント:CPU / IO など何で待っているか
ℹ️ あわせて見たい CloudWatch メトリクス
  • CPUUtilization:CPU 使用率
  • FreeableMemory:空きメモリ
  • DatabaseConnections:接続数
  • ReadIOPS / WriteIOPS:ディスク I/O
✅ 確認ポイント

Performance Insights のグラフに負荷のピークが現れ、上位 SQL に重いクエリが特定できれば成功です。これがボトルネック分析の第一歩です。

🧹 クリーンアップ

⚠️ 課金が大きいので必ず全削除

Multi-AZ・Read Replica・復元インスタンス・スナップショットはいずれも課金対象です。下記をすべて削除してください。

削除手順

  1. Read Replica を削除
    RDS → handson-rds-replica → 「アクション」→「削除」
  2. 復元インスタンスを削除
    RDS → handson-rds-restored → 「削除」
  3. プライマリ DB を削除
    RDS → handson-rds → 「削除」(最終スナップショットは「作成しない」を選択)
  4. 手動スナップショットを削除
    RDS → スナップショット → handson-rds-snap-01 を削除
  5. 自動バックアップの確認
    「自動バックアップ」タブに保持されたバックアップがあれば削除

学習のまとめ

習得したスキル実践内容
Multi-AZ 可用性手動フェイルオーバーで AZ 切替・無停止再接続
バックアップ手動スナップショット取得・自動バックアップとの違い
復元スナップショット復元・PITR の概念
読み取りスケールRead Replica 作成・レプリケーション確認・昇格
性能分析Performance Insights で上位 SQL・待機イベント特定