👁 0

データベースを構築しよう

このハンズオンでは、RDSを使ったデータベース構築について実際にハンズオン形式で手を動かしながら体験します。

  • VPCとサブネットの作成(マルチAZ構成)
  • DBサブネットグループの設定
  • RDSインスタンスの作成
  • 踏み台サーバ(EC2)からのデータベース接続
  • セキュリティグループによるアクセス制御

1. 事前準備

この講座のハンズオンでは、以下のツールやアカウントが必要です。まだ準備できていない場合は、リンク先の手順に沿って準備をお願いします。

2. ハンズオンの概要

データの永続化層としてRDSインスタンスを作成します。このRDSは、インターネットからの直接的な通信を遮断したプライベートな環境(またはアクセス制限された環境)に配置し、データ保護を優先した設定とします。

次に、このRDSに対してデータ登録や参照を行うためのクライアントとして、EC2インスタンスを作成します。このEC2は踏み台サーバとしての役割を担うため、管理者がSSH等でログインできるようパブリックな環境に配置します。

最後に、作成したEC2のセキュリティグループIDをRDS側の許可リストに追加することで、この特定のEC2からのみデータベースへの接続(ポート3306)を受け入れる、セキュアなアクセス経路を確立します。

3. 構成図

以下は、このハンズオンで構築する構成の全体像です。

VPC内にパブリックサブネットとプライベートサブネットを作成します。パブリックサブネットには踏み台サーバとなるEC2インスタンスを配置し、インターネットゲートウェイを経由してSSHでアクセスできるようにします。プライベートサブネットにはRDSインスタンスを配置し、踏み台サーバからのみデータベースに接続できる構成とします。

4. VPCの作成

4.1 VPCとネットワークリソースを一括作成

ネットワークの土台となるVPCと、関連するリソース(サブネット、インターネットゲートウェイ、ルートテーブル)を一括で作成します。

💡 ポイント
VPC作成時の「VPCなど」オプションを使用すると、サブネットやゲートウェイなどの関連リソースを自動で作成できます。個別リソースの詳細な作成手順については、「仮想サーバを立てよう」講座に記載があります。

AWSマネジメントコンソールで、検索ボックスからVPCを検索し、VPCダッシュボードを開きます。

左側のメニューから「お使いのVPC」を選択し、画面右上の「VPCを作成」ボタンをクリックします。

下記の内容を設定してください。

設定項目 設定の基準
作成するリソース VPCなど サブネット等の関連リソースを自動作成するため
名前タグの自動生成 チェックを入れる リソース名を自動で付与するため
名前タグ my-vpc リソースを識別しやすくするため
IPv4 CIDRブロック 10.0.0.0/16 約65,000個のIPアドレスを確保でき、複数のサブネットを作成するのに十分な範囲
IPv6 CIDRブロック なし 今回はIPv4のみ使用するため
テナンシー デフォルト 特別な要件がないため
アベイラビリティゾーン(AZ)の数 2 RDSのDBサブネットグループに2つのAZが必要なため
パブリックサブネットの数 2 踏み台サーバ用(1つは予備)
プライベートサブネットの数 2 RDSを2つのAZに配置するため
NATゲートウェイ なし RDSはマネージドサービスのため外部通信不要
VPCエンドポイント なし 今回は使用しないため

設定が完了したら、「VPCを作成」ボタンをクリックします。

ステータスが成功となることを確認します。

4.2 リソースの確認

VPCの作成が完了すると、以下のリソースが自動的に作成されます。

リソースタイプ 自動生成される名前 用途
VPC my-vpc-vpc 仮想ネットワーク
パブリックサブネット1 my-vpc-subnet-public1-ap-northeast-1a 踏み台サーバ配置用(AZ-a)
パブリックサブネット2 my-vpc-subnet-public2-ap-northeast-1c (今回は未使用)
プライベートサブネット1 my-vpc-subnet-private1-ap-northeast-1a RDS配置用(AZ-a)
プライベートサブネット2 my-vpc-subnet-private2-ap-northeast-1c RDS配置用(AZ-c)
インターネットゲートウェイ my-vpc-igw インターネットへの通信
ルートテーブル(パブリック) my-vpc-rtb-public パブリックサブネット用
ルートテーブル(プライベート) my-vpc-rtb-private1-ap-northeast-1a など プライベートサブネット用

VPCダッシュボードの各メニュー(サブネット、インターネットゲートウェイ、ルートテーブル)を確認し、上記のリソースが作成されていることを確認してください。

💡 ポイント
「VPCなど」オプションで作成した場合、パブリックサブネットには自動的に「パブリックIPv4アドレスの自動割り当て」が有効になり、ルートテーブルも適切に設定されます。パブリックサブネットは2つ作成されますが、今回の踏み台サーバには1つのみ使用します。

5. セキュリティグループの作成

セキュリティグループを作成します。

踏み台サーバに設定するjump-sgと、DBサーバに設定するdb-sgの2つのセキュリティグループを作成します。

jump-sgは、インバウンドルールとしてすべてのソース(0.0.0.0/0)からのSSH通信を許可します。これにより、ローカル環境からのメンテナンスのためのSSH通信(ポート22)が可能となります。

db-sgは、jump-sgからのMySQL/Aurora通信を許可します。これにより、jump-sgに所属する踏み台サーバからのSQL接続のみが許可されます。

また、どちらもアウトバウンドルールは、すべてのトラフィック通信を許可します。下記の内容を設定してください。

名前 インバウンドルール アウトバウンドルール 設定の基準
jump-sg SSH (22) / 0.0.0.0/0 すべてのトラフィック / 0.0.0.0/0 外部からSSH接続を受け付けてメンテナンスを可能にする
db-sg MySQL/Aurora (3306) / jump-sg すべてのトラフィック / 0.0.0.0/0 踏み台サーバからのDB接続のみを許可しセキュリティを確保

5.1 JUMPのセキュリティグループ

まずは踏み台サーバのセキュリティグループを作成します。

セキュリティグループの作成

VPCダッシュボードの左メニューから「セキュリティグループ」を選択し、「セキュリティグループを作成」ボタンをクリックしてください。

設定画面が表示されたら、以下の内容を入力します。

設定項目
セキュリティグループ名 jump-sg
説明 Security group for JUMP Server
VPC my-vpc-vpc

インバウンドルールの設定

同じ画面の「インバウンドルール」セクションで、「ルールを追加」ボタンをクリックし、以下の内容を入力します。

設定項目
タイプ SSH
ソース 0.0.0.0/0

なお、アウトバウンドルールはデフォルトで「すべてのトラフィックを許可」するルールが設定されているため、変更は不要です。

入力が完了したら、「セキュリティグループを作成」ボタンをクリックします。

リソースの確認

無事にjump-sgが作成されれば、ここまでの操作は完了です。

5.2 DBのセキュリティグループ

セキュリティグループの作成

同様の手順で、DB用のセキュリティグループを作成します。VPCダッシュボードの左メニューから「セキュリティグループ」を選択し、「セキュリティグループを作成」ボタンをクリックしてください。

設定画面が表示されたら、以下の内容を入力します。

設定項目
セキュリティグループ名 db-sg
説明 Security group for DB
VPC my-vpc-vpc

インバウンドルールの設定

同じ画面の「インバウンドルール」セクションで、「ルールを追加」ボタンをクリックし、以下の内容を入力します。

設定項目
タイプ MySQL/Aurora
ソース jump-sg(セキュリティグループを検索して選択)

入力が完了したら、「セキュリティグループを作成」ボタンをクリックします。

リソースの確認

無事にdb-sgが作成されれば、ここまでは完了です。

6. RDSの作成

6.1 DBサブネットグループを作成

RDSで使用するDBサブネットグループを作成します。

📝 DBサブネットグループとは
DBサブネットグループとは、RDSインスタンスを配置できるサブネットの集合です。RDSは高可用性を実現するため、異なるアベイラビリティゾーン(AZ)に属する2つ以上のサブネットを指定する必要があります(CreateDBSubnetGroup(AWS公式ドキュメント)に「DB subnet groups must contain at least one subnet in at least two AZs in the AWS Region.」と明記されています)。これにより、障害発生時に別のAZへ自動的にフェイルオーバーできる構成が可能になります。

AWSマネジメントコンソールのRDSの画面から、左メニューのサブネットグループを選択し、DBサブネットグループを作成ボタンをクリックしてください。

設定画面が表示されたら、名前にmy-subnet-groupと入力し、説明欄にはDB subnet groupと入力します。VPCの項目では、my-vpcを選択してください。

次に、サブネットを追加する設定です。まずはアベイラビリティゾーンでap-northeast-1aap-northeast-1cを選びます。グループに含めるサブネットとして、my-vpc-subnet-private1-ap-northeast-1amy-vpc-subnet-private2-ap-northeast-1cの2つを選択します。

設定ができたら、画面下にある作成ボタンをクリックします。これでDBサブネットグループの作成は完了です。

⚠️ DBサブネットグループの作成に失敗する場合
DBサブネットグループには、異なるアベイラビリティゾーンに属する2つ以上のサブネットが必要です。同じAZ内のサブネット2つでは作成できません。VPC作成時に2つのAZを選択し、それぞれにプライベートサブネットが作成されていることを確認してください。

無事にmy-subnet-groupが作成されれば、ここまでの操作は完了です。

6.2 RDSインスタンスを作成

データベース本体となるRDSインスタンスを作成します。

左メニューのデータベースを選択し、画面右上のデータベースの作成ボタンをクリックしてください。

設定項目が多いですが、一つずつ設定します。

データベース作成方法

まず、データベース作成方法ですが、今回は設定項目をしっかり見ていきたいのでフル設定を選択します。

エンジンのオプション

エンジンのオプションですが、これは使用するデータベースエンジンを選択します。Auroraを選びたいところですが、料金を抑えたいため今回はMySQLを選択します。バージョンはMySQL 8.0系の最新のものを選んでください。

テンプレート

テンプレートですが、今回は無料利用枠を選びます。そうすると可用性と耐久性の部分はシングルAZ構成しか選べなくなりますが、料金を抑えるため今回はこちらを選択します。

設定

設定の部分を入力します。

項目名 設定値 設定の基準
DBインスタンス識別子 my-db リソースを識別するため
マスターユーザ名 admin 任意(今回はadminを使用)
認証情報管理 セルフマネージド Secret Managerをまだ学んでいないため
マスターパスワード 任意のパスワード セキュリティのため独自のパスワードを設定

💡 ポイント
パスワードを忘れると後で再確認することはできないので、確実に控えておくようにしてください。

インスタンスの設定

インスタンスの設定やストレージはデフォルトで構いません。

接続

接続に関する情報です。

項目名 設定値 設定の基準
コンピューティングリソース EC2コンピューティングリソースに接続しない 自動設定は管理がしにくいため、セキュリティグループで直接設定する
VPC my-vpc 作成済みのVPCを使用
DBサブネットグループ my-subnet-group 先程作成したサブネットグループを使用
パブリックアクセス なし インターネットからの直接接続を防ぐため
VPCセキュリティグループ 既存の選択 → db-sg 踏み台サーバからのみ接続を許可するため
アベイラビリティゾーン ap-northeast-1a RDSインスタンスが作成されるAZ

その他の設定

タグやデータベース認証、モニタリング及び追加設定はデフォルトで構いません。

入力が完了したら「データベースの作成」をクリックします。

なお、RDSの作成には5分から10分程度時間がかかります。

ステータスが「利用可能」になるまで、しばらくお待ちください。

作成が完了したら、接続に必要となるエンドポイントが表示されますので、忘れずにメモをしておいてください。

⚠️ RDSの作成が失敗する場合
よくある原因として、(1) DBサブネットグループに十分なサブネットがない(異なるAZに2つ以上必要)(2) VPCでDNSホスト名が有効になっていない (3) セキュリティグループの設定エラー などがあります。RDSダッシュボードの「イベント」タブでエラーの詳細を確認してください。

無事にRDSインスタンスが作成されれば、ここまでの操作は完了です。

7. EC2インスタンスの作成

7.1 踏み台サーバを作成

次に、踏み台サーバとなるEC2インスタンスを作成します。

EC2のダッシュボード画面から、インスタンスを起動ボタンをクリックしてください。

設定画面が表示されたら、まず名前とタグの欄にjump-serverと入力します。OSイメージとなるAMIは、Amazon Linux 2023 AMIを選択してください。

インスタンスタイプは、t3.microを選択します。

キーペアについては、既存のものを選択するか、必要であれば新しく作成してください。

続いてネットワーク設定の項目です。編集ボタンを押して詳細を開き、VPCにはmy-vpcを選択します。サブネットはmy-vpc-subnet-public1-ap-northeast-1aを指定してください。また、パブリックIPの自動割り当てが有効になっていることを確認します。

セキュリティグループの設定では、「既存のセキュリティグループを選択する」を選び、リストからjump-sgを選択してください。

その他の項目はデフォルトで構いません。

すべての設定が完了したら、画面右側にある「インスタンスを起動」ボタンをクリックします。

無事にjump-serverが作成されれば、ここまでの操作は完了です。

8. 動作確認

8.1 踏み台サーバからRDSへの接続確認

踏み台サーバにSSHでログインし、RDSへの接続を確認します。

EC2インスタンスの一覧から、jump-serverをチェックし、接続をクリックします。

📝 EC2 Instance Connectとは
EC2 Instance Connectとは、AWSマネジメントコンソールのブラウザ上から直接EC2インスタンスにSSH接続できる機能です。ローカルPCにSSHクライアントをインストールしたり、秘密鍵ファイルを管理したりする必要がなく、ブラウザだけで簡単にサーバへアクセスできます。Amazon Linux 2023やUbuntuなど、対応するAMIで利用可能です。

その後、EC2 Instance Connectのタブが開かれている状態で、接続をクリックします。

以下のような接続完了画面が表示されれば成功です。

8.2 MySQLクライアントのインストール

ログインができたら、MySQLクライアントをインストールします。

sudo dnf install -y mariadb105

8.3 MySQLへの接続

インストールが終わったら、RDSに接続します。

mysql -h RDSのエンドポイント -u admin -p

RDSのエンドポイントは、先ほど作ったmy-dbのエンドポイントを指定してください。

実行するとパスワードを求められますので、RDS作成時に設定したパスワードを入力してください。

接続に成功すると、画面の表示が mysql> というプロンプトに変わります。

⚠️ RDSに接続できない場合
接続できない場合は、下記を確認してみましょう。

(1) RDSのセキュリティグループ(db-sg)で、踏み台サーバのセキュリティグループ(jump-sg)からのMySQL/Aurora(3306番ポート)が許可されているか確認
(2) RDSのエンドポイントを正しくコピーしているか確認(末尾に不要なスペースがないか)
(3) パスワードが正しいか確認

ERROR 2003 (HY000): Can't connect to MySQL serverの場合はネットワークの問題、ERROR 1045 (28000): Access deniedの場合は認証情報の問題です。

8.4 データベースの操作

ここからはSQLコマンドを入力して操作します。

※すべてのコマンドの末尾には必ずセミコロン(;)をつけてください。

なお、SQLというデータベース操作言語を使っていますが、今回はこちらの説明は省略します。

1. データベースの作成

まずはデータを格納するための「箱(データベース)」を作成します。ここでは例として sample_db という名前で作ります。

CREATE DATABASE sample_db;

作成できたか確認するために、データベースの一覧を表示してみましょう。

SHOW DATABASES;

一覧の中に sample_db が表示されていればOKです。

2. データベースの選択

作成したデータベースを使用する設定(スイッチ)に切り替えます。

USE sample_db;

Database changed と表示されれば、切り替え完了です。

3. テーブルの作成

データベースの中に、実際にデータを入れる表(テーブル)を作ります。ここでは例として、ユーザ情報を管理する users テーブルを作成します。

  • id: ユーザID(自動で番号が振られます)
  • name: 名前
  • email: メールアドレス
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

Query OK と表示されれば作成完了です。

4. データの登録 (INSERT)

作成したテーブルにテストデータを2件ほど登録してみましょう。

INSERT INTO users (name, email) VALUES ('Yamada Taro', 'taro@example.com');
INSERT INTO users (name, email) VALUES ('Suzuki Hanako', 'hanako@example.com');

5. データの確認 (SELECT)

正しくデータが登録されたか、テーブルの中身を検索して表示します。

SELECT * FROM users;

以下のような表が表示されれば、ここまでの手順は完璧です。

+----+---------------+--------------------+
| id | name          | email              |
+----+---------------+--------------------+
|  1 | Yamada Taro   | taro@example.com   |
|  2 | Suzuki Hanako | hanako@example.com |
+----+---------------+--------------------+
2 rows in set (0.00 sec)

6. 終了

確認が終わったら、MySQLクライアントを終了して踏み台サーバの元の画面に戻ります。

EXIT;

9. リソースの削除

作成したリソースを削除する手順をご案内します。課金を防ぐため、必ずインスタンスの削除から順に行ってください。なお、RDSの削除には時間がかかるため、最初にRDSの削除操作を行ってから、他の作業を進めるとスムーズです。

9.1 RDSインスタンスの削除

まず、RDSインスタンスを削除します。RDSのダッシュボードから、データベースを選択し、my-dbにチェックを入れます。その後、アクションメニューから削除を選択してください。

削除の確認画面が表示されますが、ここで重要な点があります。最終スナップショットを作成するか聞かれますので、テスト環境であればチェックを外し、スナップショットを作成しないようにしてください。自動バックアップを保持も、同様にチェックを外してください。その後、確認のチェックボックスにチェックを入れ、削除ボタンをクリックします。

ステータスが削除中になります。完全に消えるまで時間がかかりますが、次の手順に進みます。

9.2 DBサブネットグループの削除

続いて、DBサブネットグループを削除します。RDSの画面に戻り、左メニューのサブネットグループを選択します。my-subnet-groupを選択し、削除をクリックして完了させてください。

⚠️ DBサブネットグループが削除できない場合
「The DB subnet group 'my-subnet-group' is in use」というエラーが表示される場合は、RDSインスタンスの削除が完全に終わっていません。RDSのステータスが「削除中」から完全に消えるまで待ってから、再度削除を試してください。

9.3 EC2インスタンスの削除

次に、踏み台サーバであるEC2インスタンスを削除します。EC2のダッシュボードで、jump-serverを選択してください。インスタンスの状態メニューから、「インスタンスを終了」をクリックします。確認画面が出ますので、終了ボタンを押してください。

これでサーバがシャットダウンされ、削除されます。

9.4 VPCの削除

最後に、VPC本体を削除します。VPCのダッシュボードから、my-vpcを選択してください。アクションメニューからVPCを削除を選択します。削除されるリソースの一覧が表示されますので、確認して「削除」という文字を入力し、削除ボタンをクリックします。

💡 ポイント
「VPCなど」オプションで作成した場合、VPCを削除すると、サブネット、インターネットゲートウェイ、ルートテーブル、セキュリティグループなどの関連リソースも一緒に削除されます。
⚠️ VPCが削除できない場合
ネットワークインターフェイスが使用中というエラーが表示される場合は、EC2やRDSの削除が完全に完了していない可能性があります。数分待ってから、再度VPCの削除を試してください。

以上で、リソースの削除手順は終了です。

10. まとめ

このハンズオンでは、RDSを使ったデータベース構築を体験しました。

  • RDS(Relational Database Service)はAWSが提供するフルマネージドなデータベースサービス
  • DBサブネットグループにより、RDSを配置するサブネットを指定する(2つ以上のAZが必要)
  • 踏み台サーバを経由することで、プライベートサブネット内のRDSに安全に接続できる
  • セキュリティグループで踏み台サーバからのみDB接続を許可し、セキュリティを確保する
  • RDSはパブリックアクセスを無効にして、インターネットから直接接続できないようにする

この教材は役に立ちましたか?

いいねをたくさんいただけると、制作者の励みになり、より多くの講座が作れるようになります。

感想を一言(任意)

いただいたコメントは次の制作のヒントになります。ぜひお気軽にご投稿ください。

このコメントは他の受講生には公開されません。DevOps Camp運営が、教材改善のために確認します。

0 / 2000