Day 8: RDS実践:MySQL/PostgreSQLインスタンスの構築と接続
皆さん、こんにちは!「AWSデータベース・ストレージ完全攻略」のDay 8へようこそ!
昨日のDay 7では、リレーショナルデータベースの基本と、AWSでRDBMSをマネージドサービスとして利用できるAmazon RDSの概要、そしてその主要な機能について学びました。概念的な理解は深まったはずです。
今日は、その知識を実践に移す日です。実際にAWSマネジメントコンソールを使ってAmazon RDS for MySQLまたはPostgreSQLインスタンスを構築し、外部からそのデータベースに接続する方法を具体的に見ていきましょう。手を動かすことで、RDSの理解が格段に深まります。
この記事では、最も一般的なユースケースである「開発/テスト環境」を想定し、必要最小限の設定でインスタンスを作成し、簡単なSQLクライアントから接続する手順を解説します。
1. はじめに:準備するもの
実際にRDSインスタンスを構築する前に、以下のものが準備できているか確認しましょう。
- AWSアカウント: 必須です。無料利用枠の対象となるインスタンスタイプで進めます。
- AWSマネジメントコンソールへのアクセス: rootユーザーではなく、適切なIAM権限を持つユーザーでログインすることを推奨します。
-
SQLクライアント: データベースに接続してクエリを実行するために使用します。
-
MySQLの場合: MySQL Workbench, DataGrip, DBeaver, またはコマンドラインの
mysqlクライアント。 -
PostgreSQLの場合: pgAdmin, DataGrip, DBeaver, またはコマンドラインの
psqlクライアント。 - この記事ではDBeaverを例に説明しますが、基本的な接続情報はどのクライアントでも同じです。
-
MySQLの場合: MySQL Workbench, DataGrip, DBeaver, またはコマンドラインの
- (オプション)EC2インスタンス: パブリックアクセスなしのRDSインスタンスに接続する場合、同じVPC内のEC2インスタンスを踏み台(踏み台サーバー / bastion host)として利用することが一般的です。今回は簡略化のため、パブリックアクセスありで進めますが、本番環境ではパブリックアクセスなしが推奨です。
2. RDS for MySQL/PostgreSQL インスタンスの構築手順
AWSマネジメントコンソールからRDSインスタンスを作成する手順を見ていきましょう。今回は「開発/テスト環境」を想定し、コストを抑えた設定で進めます。
ステップ1: RDSコンソールへ移動
- AWSマネジメントコンソールにログインします。
- 検索バーで「RDS」と入力し、RDSサービスをクリックしてコンソールへ移動します。
- 左側のナビゲーションペインで「データベース」を選択し、「データベースの作成」ボタンをクリックします。
ステップ2: エンジンオプションとデプロイオプションの選択
-
エンジンのオプションを選択:
- 今回は「MySQL」または「PostgreSQL」を選択します。(どちらを選んでも手順はほぼ同じです)
- バージョン: デフォルトの最新バージョンで問題ありません。
-
テンプレート: 「開発/テスト」を選択します。これにより、マルチAZなどの高可用性オプションがデフォルトで無効になり、コストを抑えられます。
- 学習目的であれば「無料利用枠」を選択することも可能ですが、「開発/テスト」テンプレートでも多くの無料利用枠対象のインスタンスタイプを利用できます。
ステップ3: DBインスタンスの識別子と認証情報の設定
-
DB インスタンス識別子: 任意の名前を入力します。(例:
my-rds-dbまたはmy-pg-db)。これはRDSコンソールでインスタンスを識別するための名前です。 -
マスターユーザー名: データベースの管理者ユーザー名を設定します。(例:
admin)。 - マスターパスワードとパスワードの確認: 強力なパスワードを設定し、控えておきましょう。このパスワードは後でデータベースに接続する際に必要になります。
ステップ4: インスタンス設定
-
DB インスタンスクラス:
- 無料利用枠の対象かつ開発/テスト用途であれば、
db.t3.microまたはdb.t4g.micro(Gravitonベース) を選択します。これにより、コストを抑えられます。 - より高いパフォーマンスが必要な場合は、
db.t3.smallやdb.m5.largeなどを検討しますが、これらは無料利用枠の対象外になることが多いです。
- 無料利用枠の対象かつ開発/テスト用途であれば、
ステップ5: ストレージ設定
- ストレージタイプ: 「汎用 SSD (gp3)」を選択します。これが推奨設定です。
- 割り当て済みストレージ: 開発/テストであれば「20 GiB」で十分です。
- ストレージの自動スケーリングの有効化: 「ストレージの自動スケーリングを有効にする」のチェックは、今回はオフのままで構いません(コストを予測しやすくするため)。本番環境ではオンにすることを推奨します。
ステップ6: 可用性とスケーラビリティ (重要!)
-
マルチ AZ 配置:
- 「開発/テスト」テンプレートを選択した場合、デフォルトで「スタンバイインスタンスを作成しない」が選択されているはずです。このままで進めます。
- これは高可用性を提供しないため、本番環境では「スタンバイインスタンスを作成する」を選択し、マルチAZデプロイメントを有効にすることを強く推奨します。
ステップ7: 接続設定 (非常に重要!)
-
Virtual Private Cloud (VPC):
- デフォルトVPCで問題ありません。AWSアカウントで通常作成されているものです。
-
DB サブネットグループ:
- 通常はデフォルトのサブネットグループが選択されています。特に変更する必要はありません。
-
パブリックアクセス:
- 今回は外部(皆さんのPCなど)から直接接続するため、「はい」を選択します。
- 本番環境では「いいえ」を選択し、同じVPC内のEC2インスタンスを踏み台として経由して接続することがセキュリティベストプラクティスです。
-
VPC セキュリティグループ (ファイアウォール):
- 「新規作成」を選択し、任意のセキュリティグループ名を入力します。(例:
my-rds-sg)。 - このセキュリティグループで、**インバウンドルール(受信ルール)**を設定し、どのIPアドレスやセキュリティグループからの接続を許可するかを定義します。
- タイプ: MySQLであれば「MYSQL/Aurora (3306)」、PostgreSQLであれば「PostgreSQL (5432)」をそれぞれ選択します。
-
ソース: 「マイIP」を選択すると、現在利用しているPCのパブリックIPアドレスからのアクセスのみが許可されます。これは開発/テスト環境で安全に接続する最も簡単な方法です。
- 警告: 「任意の場所 (0.0.0.0/0)」を選択すると、インターネット上のすべてのIPアドレスからのアクセスが許可されてしまい、セキュリティリスクが非常に高くなります。学習目的以外では絶対に避けてください。
- 「新規作成」を選択し、任意のセキュリティグループ名を入力します。(例:
ステップ8: データベース認証、追加設定、および最終確認
-
データベース認証: 「パスワード認証」が選択されていることを確認します。
-
追加設定 (重要):
-
初期データベース名: 任意のデータベース名を入力します。(例:
mydb)。この名前でRDSインスタンス内に初期データベースが作成されます。後で別のデータベースを作成することも可能です。 - ポート: MySQLは3306、PostgreSQLは5432がデフォルトです。変更する必要はありません。
- DBパラメータグループ: 通常はデフォルトで問題ありません。詳細なチューニングが必要な場合は後でカスタムグループを作成・適用します。
- オプショングループ: デフォルトで問題ありません。
- バックアップ: 「バックアップ保持期間」は、無料利用枠であれば1日に設定すると良いでしょう。
- モニタリング: 「拡張モニタリングを有効にする」はオフで構いません(費用が発生するため)。
- ログのエクスポート: オフで構いません。
- メンテナンス: デフォルトで問題ありません。
- 削除保護: デフォルトで「有効にする」が選択されているはずです。今回は検証用なので、「無効にする」のチェックを外して削除保護を有効にしないように変更しておきましょう。これにより、検証後にインスタンスを簡単に削除できます。
-
初期データベース名: 任意のデータベース名を入力します。(例:
-
月額費用の見積もり: 右側に表示される月額費用の見積もりを確認します。無料利用枠の範囲内か、予算内に収まっているかを確認しましょう。
-
「データベースの作成」ボタンをクリックします。
インスタンスの作成には、選択したインスタンスタイプや設定によって数分から十数分かかる場合があります。「データベース」のリストでステータスが「利用可能」になるまで待ちましょう。
3. RDSインスタンスへの接続
RDSインスタンスが「利用可能」になったら、SQLクライアントから接続してみましょう。
ステップ1: RDSインスタンスのエンドポイントの取得
- RDSコンソールで、作成したDBインスタンスをクリックします。
- 「接続とセキュリティ」タブをクリックします。
- 「エンドポイント」の欄に表示されているURLをコピーします。これがデータベースのホスト名になります。
- 「ポート」も確認します(MySQL: 3306, PostgreSQL: 5432)。
ステップ2: SQLクライアント(DBeaverの例)からの接続
ここでは、DBeaverを例に接続手順を説明します。他のクライアントでも設定項目は同様です。
-
DBeaverを起動します。
-
左上の「新しいデータベース接続」アイコン(プラグのようなアイコン)をクリックします。
-
データベースタイプを選択:
- MySQLインスタンスの場合は「MySQL」を選択。
- PostgreSQLインスタンスの場合は「PostgreSQL」を選択。
- 「次へ」をクリック。
-
接続設定の入力:
- ホスト: ステップ1でコピーしたRDSインスタンスのエンドポイントをペーストします。
- ポート: ステップ1で確認したポート番号を入力します。(MySQL: 3306, PostgreSQL: 5432)
-
データベース: RDSインスタンス作成時に「初期データベース名」として指定した名前を入力します。(例:
mydb) -
ユーザー名: RDSインスタンス作成時に設定した「マスターユーザー名」を入力します。(例:
admin) - パスワード: RDSインスタンス作成時に設定した「マスターパスワード」を入力します。
- 「パスワードを保存する」にチェックを入れておくと、次回から入力不要になります(セキュリティには注意)。
-
接続テスト:
- 「Test Connection ...」ボタンをクリックします。
- 「Connected」と表示されれば成功です。もしエラーが表示された場合は、以下の点を確認してください。
- RDSインスタンスのステータスが「利用可能」になっているか。
- エンドポイント、ポート、ユーザー名、パスワードが正しいか。
-
最も多い原因: RDSインスタンスのセキュリティグループのインバウンドルールで、現在接続しようとしているPCのパブリックIPアドレスからのアクセスが許可されているか。
- AWSマネジメントコンソールに戻り、RDSインスタンスのセキュリティグループのルールを確認し、必要に応じて「マイIP」または一時的に「任意の場所 (0.0.0.0/0)」を追加してみてください(ただし後者は一時的かつ学習目的に限定すること!)。
-
「完了」をクリックします。
これで、SQLクライアントからRDSインスタンスに接続できました!
ステップ3: データベースの操作
接続が成功したら、SQLエディタを開いて簡単なクエリを実行してみましょう。
-
DBeaverの左側のデータベースナビゲーターで、作成したRDS接続を展開します。
-
mydb(または設定した初期データベース名)を右クリックし、「SQLエディタ」→「新しいSQLスクリプト」を選択します。 -
SQLエディタに以下のクエリを入力し、実行ボタン(稲妻のアイコン)をクリックします。
MySQLの場合:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL ); INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com'); SELECT * FROM users;PostgreSQLの場合:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL ); INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com'); SELECT * FROM users;
クエリが正常に実行され、結果が表示されれば成功です!これで、クラウド上のリレーショナルデータベースを自由に操作できる準備が整いました。
4. RDSインスタンスの削除(クリーンアップ)
学習目的で作成したRDSインスタンスは、不要になったら必ず削除しましょう。RDSは時間課金であり、インスタンスを稼働させたままにしておくと意図しない費用が発生する可能性があります。
- AWSマネジメントコンソールのRDSサービスに戻ります。
- 「データベース」リストから、削除したいDBインスタンスを選択します。
- 「アクション」メニューから「削除」を選択します。
- 確認画面が表示されます。
- 「最終スナップショットを作成しますか?」: **「いいえ」**を選択します。(本番環境では「はい」を選択し、最終バックアップを取得することが推奨されます)。
- 「自動バックアップを保持しますか?」: **「いいえ」**を選択します。
- 「識別子」のテキストボックスにインスタンス名を入力し、確認します。
- 「削除」ボタンをクリックします。
インスタンスの削除には数分かかる場合があります。ステータスが「削除中」となり、最終的にリストから消えれば完了です。
まとめとDay 9への展望
今日のDay 8では、Amazon RDS for MySQL/PostgreSQLインスタンスを実際にAWSマネジメントコンソールから構築し、SQLクライアントから接続して簡単なデータベース操作を行う実践的な手順を学びました。
- RDSインスタンスの作成は、エンジン選択からセキュリティ設定まで、いくつかの重要なステップがありました。特にパブリックアクセスとセキュリティグループの設定は、セキュリティ上非常に重要であることを理解できたはずです。
- SQLクライアントからの接続を通じて、実際にクラウド上のデータベースにデータを作成・操作できることを確認しました。
この実践経験は、今後のより高度なデータベース管理や、アプリケーションとデータベースの連携を考える上で大きな自信となるでしょう。
明日のDay 9では、今日作成した単一のRDSインスタンスではカバーできない、高可用性(High Availability) と スケーラビリティ(Scalability) の実現方法に焦点を当てます。具体的には、RDSのマルチAZデプロイメントとリードレプリカについて深く掘り下げ、ミッションクリティカルなアプリケーションのための設計原則を学びます。
それでは、また明日お会いしましょう!
