本番 DB の運用を体験する ― Multi-AZ フェイルオーバー・バックアップ・復元・Read Replica・Performance Insights
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 倍以上のインスタンス費用がかかります。ハンズオン終了後は必ずすべてのインスタンス・スナップショットを削除してください。
| 項目 | Multi-AZ スタンバイ | Read Replica |
|---|---|---|
| 目的 | 可用性(HA) | 読み取りスケール |
| レプリケーション | 同期 | 非同期 |
| 通常時のアクセス | 不可(待機のみ) | 読み取り可能 |
| 障害時 | 自動フェイルオーバー | 手動昇格が必要 |
ap-northeast-1(東京) を使用psql が使える環境(CloudShell or EC2)ポータルの「CloudFormation 環境構築キット(cfn-base)」のスタック A をデプロイすると、Multi-AZ の handson-rds が既に作られます。それを使えばステップ 1 の作成を省略できます。
「RDS」→「データベースの作成」 をクリックします。
| 設定項目 | 設定値 |
|---|---|
| 作成方法 | 標準作成 |
| エンジン | PostgreSQL 16 |
| テンプレート | 開発/テスト |
| 可用性 | マルチ AZ DB インスタンス |
| 識別子 | handson-rds |
| インスタンスクラス | db.t3.micro |
| ストレージ | 20 GB gp3 |
| マスターユーザー | admin / 任意のパスワード |
| パブリックアクセス | なし(CloudShell/EC2 から接続) |
| 自動バックアップ | 有効・保持期間 1 日 |
「データベースの作成」をクリックします(作成完了まで 10〜15 分)。
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;RDS → handson-rds を選択 → 「アクション」→「再起動」 で 「フェイルオーバーで再起動」 を選択します(または「アクション」→「Reboot」でフェイルオーバーオプションにチェック)。
プライマリとスタンバイの AZ が入れ替わります。「設定」タブでアベイラビリティーゾーンが変わったことを確認します。
フェイルオーバー中も同じエンドポイントで再接続でき、items テーブルのデータが保持されていることを確認します。エンドポイント名は変わらず、裏側で AZ が切り替わるのが Multi-AZ の利点です。「イベント」タブにフェイルオーバーの記録が残ります。
RDS → handson-rds を選択 → 「アクション」→「スナップショットの取得」 をクリックします。
「スナップショットの取得」をクリックします。「スナップショット」メニューでステータスが「利用可能」になるまで待ちます。
| 項目 | 自動バックアップ | 手動スナップショット |
|---|---|---|
| 取得 | 毎日自動 + トランザクションログ | 任意のタイミングで手動 |
| 保持 | 最大 35 日(自動削除) | 明示的に削除するまで永続 |
| 復元 | ポイントインタイムリカバリ可 | 取得時点に復元 |
「スナップショット」→「手動」タブに handson-rds-snap-01 が「利用可能」で表示されれば成功です。
スナップショットは「新しいインスタンス」として復元されます(上書きではありません)。
handson-rds-snap-01 を選択 → 「アクション」→「スナップショットを復元」 をクリックします。
「DB インスタンスを復元」をクリックします(10 分前後)。
復元された handson-rds-restored のエンドポイントに接続し、スナップショット取得時点のデータがあることを確認します。
自動バックアップが有効なら、スナップショットなしでも 「アクション」→「特定の時点への復元」 で 5 分前など任意の時刻に復元できます(保持期間内)。誤った DELETE 直前への巻き戻しに有効です。
復元インスタンスで items が 1000 件あれば成功です。元の DB とは独立した別インスタンスである点を理解しましょう。
RDS → handson-rds を選択 → 「アクション」→「リードレプリカの作成」 をクリックします。
「リードレプリカの作成」をクリックします。
プライマリにデータを追加し、レプリカに反映されることを確認します。
# プライマリに書き込み 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 エラーになることも確認します(読み取り専用)。
handson-rds-replica → 「アクション」→「昇格」 でレプリカを独立した読み書き可能な DB に昇格できます。災害復旧(別リージョンレプリカの昇格)などで使うパターンです。
プライマリへの書き込みがレプリカで読めること、レプリカへの書き込みが拒否されることを確認できれば成功です。CloudWatch の ReplicaLag メトリクスで遅延も確認できます。
RDS → handson-rds → 「変更」 →「モニタリング」セクションで 「Performance Insights を有効化」 にチェックを入れて保存します(保持 7 日は無料)。
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 \$\$;"RDS 左メニュー 「Performance Insights」 を開き、handson-rds を選択します。
CPUUtilization:CPU 使用率FreeableMemory:空きメモリDatabaseConnections:接続数ReadIOPS / WriteIOPS:ディスク I/OPerformance Insights のグラフに負荷のピークが現れ、上位 SQL に重いクエリが特定できれば成功です。これがボトルネック分析の第一歩です。
Multi-AZ・Read Replica・復元インスタンス・スナップショットはいずれも課金対象です。下記をすべて削除してください。
handson-rds-replica → 「アクション」→「削除」handson-rds-restored → 「削除」handson-rds → 「削除」(最終スナップショットは「作成しない」を選択)handson-rds-snap-01 を削除| 習得したスキル | 実践内容 |
|---|---|
| Multi-AZ 可用性 | 手動フェイルオーバーで AZ 切替・無停止再接続 |
| バックアップ | 手動スナップショット取得・自動バックアップとの違い |
| 復元 | スナップショット復元・PITR の概念 |
| 読み取りスケール | Read Replica 作成・レプリケーション確認・昇格 |
| 性能分析 | Performance Insights で上位 SQL・待機イベント特定 |