はじめに
こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY14になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
https://qiita.com/satosato_kozakana/items/446971c2deca7e27d0aa
概要
| 項目 | 内容 |
|---|---|
| 所要時間 | 約1.5時間 |
| メインサービス | Amazon Aurora (MySQL), Amazon VPC, Amazon EC2 |
| 学べること | Aurora の基礎知識, 高可用性データベース構築(マルチAZ配置), 踏み台サーバ構築 |
| 想定費用 | 約50円(※実行時間により変動します) |
⚠️ 注意:以下のリソースを削除し忘れると課金が継続するため、ご注意ください。
課題内容
Amazon Auroraを用いて高可用性なマルチAZ構成のデータベース環境を構築します。
アーキテクチャ図
実装機能
- Amazon Aurora (MySQL 8.0) でプライマリインスタンスとリードレプリカを持つDBクラスタを構築
- マルチAZ配置による高可用性の実現
- VPC、サブネットを使用したネットワーク分離とセキュリティ設定
- EC2の踏み台サーバーからの安全なデータベース接続
- セキュリティグループによるアクセス制御
💡 実装のヒント
Aurora クラスターの構成
Aurora では、プライマリインスタンスで書き込み処理を行い、リードレプリカで読み取り処理を分散できます。マルチAZ配置により、異なるアベイラビリティーゾーンにインスタンスを配置し、高可用性を実現します。
VPC とサブネット設計
データベースは外部からの直接アクセスを防ぐため、プライベートサブネットに配置します。EC2 の踏み台サーバーをパブリックサブネットに配置し、安全に DB にアクセスできるようにします。
セキュリティグループの設定
Aurora 用のセキュリティグループは、EC2 のセキュリティグループからのみ MySQL ポート(3306)を許可するよう設定します。これにより、踏み台サーバー経由のみでデータベースにアクセス可能になります。
✅ 完成後のチェックポイント
- Aurora クラスターが作成されている
- プライマリインスタンスとリードレプリカが異なる AZ に配置されている
- EC2(踏み台サーバ)を経由して Aurora に接続できる
- データベースの作成・テーブル作成・データ挿入ができる
- リードレプリカから読み取りができる
- リードレプリカへの書き込みが拒否される
- 暗号化が有効になっている
使用資材
データベース設定要件
- データベース名:
handson_db - マスターユーザー名:
admin - パスワード: 複雑なパスワード(8文字以上)
- 暗号化: 有効
- バックアップ保持期間: 7日間
動作確認用SQLサンプル
-- データベース確認
SHOW DATABASES;
-- データベース作成 (基本的に実行不要。handson_dbが作成されていない場合のみ実行する。)
CREATE DATABASE handson_db;
-- 使用データベース切り替え
USE handson_db;
-- テーブル作成
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- データ挿入
INSERT INTO users (username, email)
VALUES ('testuser1', 'test1@example.com'),
('testuser2', 'test2@example.com');
-- データ確認
SELECT * FROM users;
フェイルオーバー体験
構築が出来たらAuroraの特徴である高可用性を実際に体験してみましょう!
-
現在のプライマリインスタンスを確認
RDSコンソールでクラスター詳細を開く- 「ライターインスタンス」と表示されているものがプライマリインスタンス
- どのAZに配置されているか確認
-
接続状態を維持したままフェイルオーバーを実行
# EC2で以下のコマンドを実行(接続を維持) mysql -h [クラスターエンドポイント] -u admin -p # MySQL接続後、以下を実行して接続状態を確認 SELECT @@hostname, NOW(); -
手動フェイルオーバーの実行
- RDSコンソールでクラスターを選択
- 新しくプライマリにするリードレプリカを選択
- 「アクション」→「フェイルオーバー」を実行
-
フェイルオーバー中の動作確認
# MySQL接続を維持したまま、定期的に以下を実行 SELECT @@hostname, NOW(); # フェイルオーバー完了後、再度実行 SELECT @@hostname, NOW(); # データが保持されているか確認 USE handson_db; SELECT * FROM users; -
フェイルオーバー結果の確認
RDSコンソールで新しいプライマリインスタンスを確認- 異なるAZに切り替わっていることを確認
💡 体験できること:
- 速やかなフェイルオーバー(30秒~2分程度)
- 短時間の切断後に再接続で復旧する
- データが損失せずに別AZのインスタンスに切り替え
- 単一AZの障害に対する耐性を実感
リファレンスリンク
解答・構築手順
解答と構築手順を見る
ステップ1: VPCとサブネットの作成
-
VPC関連リソースの一括作成
- AWSマネジメントコンソールにログイン
- VPCサービスに移動
- 「VPCを作成」をクリック
- 作成するリソース: 「VPCなど」を選択
- 以下の設定値を入力:
- 名前タグ:
aurora-handson - IPv4 CIDRブロック:
10.0.0.0/16 - アベイラビリティーゾーン数:
2 - パブリックサブネット数:
2 - プライベートサブネット数:
2 - NATゲートウェイ:
なし - VPCエンドポイント:
なし
- 名前タグ:
- 「VPCを作成」をクリック
作成されるリソース:
- VPC (10.0.0.0/16)
- パブリックサブネット (10.0.0.0/20)
- パブリックサブネット (10.0.16.0/20) ※2つ作成されるが片方はこの課題では使用しない
- プライベートサブネット1 (10.0.128.0/20)
- プライベートサブネット2 (10.0.144.0/20)
- インターネットゲートウェイ
- ルートテーブル(自動設定)
ステップ2: セキュリティグループの作成
-
EC2用セキュリティグループ
- セキュリティグループ名:
aurora-handson-ec2-sg - VPC: ステップ1で作成したVPCを選択
- インバウンドルール:
- タイプ: SSH, ポート: 22(固定), ソース: マイIP
- セキュリティグループ名:
-
Aurora用セキュリティグループ
- セキュリティグループ名:
aurora-handson-db-sg - VPC: ステップ1で作成したVPCを選択
- インバウンドルール:
- タイプ: MySQL/Aurora, ポート: 3306(固定), ソース: 1で作成したEC2用セキュリティグループ
- セキュリティグループ名:
ステップ3: DBサブネットグループの作成
- RDSサービスに移動
- 「サブネットグループ」→「DBサブネットグループを作成」
- 設定:
- 名前:
aurora-handson-subnet-group - 説明:
Aurora handson subnet group - VPC: ステップ1で作成したVPCを選択
- アベイラビリティーゾーン:
ap-northeast-1a,ap-northeast-1c※ - サブネット: プライベートサブネット1、2を選択
- 名前:
※東京リージョン以外を利用している場合は、アベイラビリティゾーンを利用中のリージョンのAZ名に読み替えて下さい。
ステップ4: Auroraクラスターの作成
-
クラスター作成開始
- RDS→「データベース」→「データベースの作成」
- データベース作成方法: 「標準作成」
- エンジンタイプ: 「Aurora(MySQL Compatible)」
- エンジンバージョン: 「メジャーバージョンのデフォルト 8.0」
-
テンプレート
- 「開発/テスト」を選択
-
設定
- DBクラスター識別子:
aurora-cluster - マスターユーザー名:
admin - 認証情報管理:
セルフマネージド - マスターパスワード: 複雑なパスワードを設定(8文字以上)
- DBクラスター識別子:
-
インスタンスの設定
- DBインスタンスクラス:
db.t3.medium(バースト可能クラス)
- DBインスタンスクラス:
-
可用性と耐久性
- マルチAZ配置: 「別の AZ で Aurora レプリカ/リーダーノードを作成する」にチェック
-
接続
- VPC: ステップ1で作成したVPCを選択
- DBサブネットグループ: ステップ3で作成したサブネットグループを選択
- セキュリティグループ: ステップ2で作成したAurora用セキュリティグループを選択
-
追加設定
- 初期データベース名:
handson_db
- 初期データベース名:
-
「データベースの作成」をクリック
ステップ5: EC2インスタンスの作成
-
インスタンス起動
- EC2サービス→「インスタンスを起動」
- 名前:
aurora-bastion - AMI: Amazon Linux 2023 (無料枠)
- インスタンスタイプ:
t3.micro(無料枠)
-
キーペア
- 新しいキーペアを作成または既存のものを選択
-
ネットワーク設定
- VPC: ステップ1で作成したVPCを選択
- サブネット: ステップ1で作成したパブリックサブネットを選択
- パブリックIPの自動割り当て: 有効
- セキュリティグループ: EC2用セキュリティグループ選択
-
「インスタンスを起動」をクリック
ステップ6: 動作確認
-
EC2への接続
ssh -i your-key.pem ec2-user@[EC2のパブリックIP] -
MariaDB 10.5(MySQL互換クライアント)のインストール
sudo yum update -y sudo yum install mariadb105 -y -
Auroraへの接続テスト
- RDSコンソールでライターインスタンスのクラスターエンドポイントを確認
- 接続コマンド実行し、ステップ4で設定したパスワードを入力
mysql -h [クラスターエンドポイント] -u admin -p -
データベース操作の確認
- 「使用資材」のSQLサンプルを実行してテーブル作成とデータ挿入を行う
- 画像の様にテーブル内のデータが確認できればOK
-
「フェイルオーバー体験」の実施
- 「フェイルオーバー体験」の手順を実行してフェイルオーバーを行う
完了確認
- Auroraクラスターが「利用可能」状態
- プライマリとリードレプリカが異なるAZに配置
- EC2からの接続成功
- データベース操作が正常に動作
- 手動フェイルオーバーが正常に実行される
- フェイルオーバー後もデータが保持されている
- 新しいプライマリインスタンスが別AZに切り替わっている
🧹 片付け(リソース削除)
- EC2 インスタンスを削除
- Aurora クラスターを削除
- DB サブネットグループを削除
- セキュリティグループを削除
- VPC を削除
おつかれさまでした!
この課題では Amazon Aurora を使用した高可用性データベースとEC2の踏み台サーバを利用した接続経路の構築をすることができました!
踏み台サーバを利用して安全に接続する方法は、データベースに保存してある機密情報を守るために、実際の現場でもスタンダードに用いられる方法なので、使えるようになっておきたいですね。
また、AuroraのマルチAZ構成によるフェイルオーバーを実践して頂きました。これによって、マルチAZ構成の利点を実感できたかと思います!

