Amazon RDS でデータベースを作成し EC2 から接続する
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
準備 6 項目中 1 番目
前提条件
- リージョン:
ap-northeast-1(東京) - AWS マネジメントコンソールにログイン済みで、IAM ユーザーまたはロールに RDS・EC2・Systems Manager の操作権限があること
- 以下のリソースが作成済みであること
| リソース種別 | リソース名 | 内容 |
|---|---|---|
| VPC | rds-vpc | CIDR 10.0.0.0/16 |
| パブリックサブネット | rds-public-subnet-1a / rds-public-subnet-1c | 10.0.1.0/24(ap-northeast-1a)/ 10.0.2.0/24(ap-northeast-1c)。インターネットゲートウェイへのルートあり |
| プライベートサブネット | rds-private-subnet-1a / rds-private-subnet-1c | 10.0.11.0/24(ap-northeast-1a)/ 10.0.12.0/24(ap-northeast-1c)。インターネットへのルートなし |
| セキュリティグループ | rds-web-sg | Web サーバー用。インバウンドルールなし |
| EC2 インスタンス | rds-web-server | Amazon Linux 2023。rds-public-subnet-1a に配置し、rds-web-sg を付与。mysql クライアント(mariadb105)をインストール済み。AmazonSSMManagedInstanceCore を含むインスタンスプロファイルが付与され、Session Manager で接続できる状態 |
VPC とサブネットの考え方は Amazon VPC で仮想ネットワークを構築しサブネットを設定する、EC2 の基本は Amazon EC2 でインスタンスを起動しSSH接続する を参照してください。
準備 6 項目中 2 番目
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| セキュリティグループ | rds-db-sg | DB インスタンス用。rds-web-sg からの TCP 3306 のみ許可 |
| DB サブネットグループ | rds-db-subnet-group | DB を置くプライベートサブネット 2 つ(2 AZ)のセット |
| RDS DB インスタンス | rds-handson-db | RDS for MySQL。シングル AZ、パブリックアクセスなし |
手順 6 項目中 3 番目
DB 用のセキュリティグループを作成する
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
EC2と入力し、表示された「EC2」を選択します - 左側ナビゲーションの「ネットワーク & セキュリティ」→「セキュリティグループ」を選択します
- 右上の「セキュリティグループを作成」をクリックします
- 「基本的な詳細」で以下を入力します
- セキュリティグループ名:
rds-db-sg - 説明:
Security group for rds-handson-db - VPC:
rds-vpc
- セキュリティグループ名:
- 「インバウンドルール」セクションで「ルールを追加」をクリックし、以下を入力します
- タイプ:
MYSQL/Aurora(プロトコルTCP、ポート範囲3306が自動で入ります) - ソース:
カスタムのまま、右の検索ボックスにrds-web-sgと入力して候補から選択
- タイプ:
- 「アウトバウンドルール」はデフォルトのままにします
- ページ下部の「セキュリティグループを作成」をクリックします
手順 6 項目中 4 番目
DB サブネットグループを作成する
- 上部の検索バーに
RDSと入力し、表示された「Aurora and RDS」を選択します - 左側ナビゲーションの「サブネットグループ」を選択します
- 「DB サブネットグループを作成」をクリックします
- 「サブネットグループの詳細」で以下を入力します
- 名前:
rds-db-subnet-group - 説明:
Private subnets for rds-handson-db - VPC:
rds-vpc
- 名前:
- 「サブネットを追加」で以下を選択します
- アベイラビリティーゾーン:
ap-northeast-1aとap-northeast-1c - サブネット:
10.0.11.0/24(rds-private-subnet-1a)と10.0.12.0/24(rds-private-subnet-1c)
- アベイラビリティーゾーン:
- 「作成」をクリックします
サブネットグループの一覧に rds-db-subnet-group が表示されることを確認します。
手順 6 項目中 5 番目
DB インスタンスを作成する
「データベースの作成」は設定項目が多いため、ここで指定する項目以外はすべてデフォルトのままにします。
- 左側ナビゲーションの「データベース」を選択し、「データベースの作成」をクリックします
- 「データベース作成方法を選択」で
フル設定を選択します - 「エンジンのオプション」の「エンジンのタイプ」で
MySQLを選択します(エンジンバージョンはデフォルトのまま) - 「テンプレート」で
無料利用枠を選択します(無料利用枠を選ぶと、次の「可用性と耐久性」がシングル AZ に、インスタンスクラスがdb.t4g.microに切り替わります) - 「可用性と耐久性」の「デプロイオプション」が
シングル AZ DB インスタンスデプロイ (1 インスタンス)(スタンバイインスタンスを作成しない構成)になっていることを確認します - 「設定」で以下を入力します
- DB インスタンス識別子:
rds-handson-db - マスターユーザー名:
admin - 認証情報管理:
セルフマネージド - マスターパスワード / パスワードを確認: 任意のパスワード(8 文字以上)を入力し、控えておきます
- DB インスタンス識別子:
- 「インスタンスの設定」で、
バースト可能クラス (t クラスを含む)が選択され、インスタンスタイプがdb.t4g.microになっていることを確認します - 「ストレージ」はデフォルトのままにします
続けて、同じ画面の「接続」セクションを以下のように設定します。DB をプライベートサブネットに置き、rds-web-sg からの通信だけを受け付けるための設定です。
- コンピューティングリソース:
EC2 コンピューティングリソースに接続しない - Virtual Private Cloud (VPC):
rds-vpc - DB サブネットグループ:
rds-db-subnet-group - パブリックアクセス:
なし - VPC セキュリティグループ (ファイアウォール):
既存の選択を選び、defaultを「×」で外してrds-db-sgを選択 - アベイラビリティーゾーン:
指定なし(デフォルト)
- 「データベース認証」の「データベース認証オプション」は
パスワード認証のままにします - 「追加設定」を開き、「最初のデータベース名」に
handsondbと入力します(その他の項目はデフォルトのまま) - ページ下部の「データベースの作成」をクリックします
データベースの一覧に rds-handson-db が表示されます。作成には少し時間がかかります。ステータスが「利用可能」になるまで待ちます。
rds-handson-dbを選択し、「接続とセキュリティ」タブを開きます- 「接続手順」の
mysql -hに続く値が DB のエンドポイント(rds-handson-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.comの形式)です。エンドポイントとポート3306を控えます - 「セキュリティグループのルール」に、
rds-db-sgのインバウンドルール(ソースがrds-web-sgのセキュリティグループ ID)が表示されていることを確認します
手順 6 項目中 6 番目
EC2 から DB に接続して SQL を実行する
- 上部の検索バーに
EC2と入力し、表示された「EC2」を選択します - 左側ナビゲーションの「インスタンス」を選択し、
rds-web-serverを選択して「接続」をクリックします - 「セッションマネージャー」タブを選択し、「接続」をクリックします
- ブラウザ上にターミナルが開いたら、まず DB のエンドポイントを名前解決します。
<エンドポイント>は控えた値に置き換えてください
getent hosts <エンドポイント>
10.0.11.x または 10.0.12.x のプライベート IP アドレスが返り、DB がプライベートサブネットにあることが確認できます。
- mysql クライアントで DB に接続します。パスワードを聞かれたら、作成時に設定したマスターパスワードを入力します
mysql -h <エンドポイント> -P 3306 -u admin -p
MySQL [(none)]> のようなプロンプトが表示されれば接続成功です。
- 最初のデータベースとして作成した
handsondbに切り替え、テーブルを作ってデータを入れてみます
USE handsondb;
CREATE TABLE members (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO members VALUES (1, 'cloud-osaru'), (2, 'tohi');
SELECT * FROM members;
SELECT の結果に 2 行が表示されれば、EC2 からプライベートサブネットの RDS へ接続して読み書きできています。
exitと入力して mysql クライアントを終了します