RDSを構築してEC2と連携する方法
この記事では、RDSを構築してEC2と連携する手順を解説します。
構成
使用技術
- EC2:Amazon Linux 2023
- RDS: MySQL 8.0.41
リージョン
リージョンが、VPCを作成したリージョンと合っているか確認
1.プライベートサブネットを作成
サブネットとは、VPC内でIPアドレスの範囲を小さく分けたネットワークであり、プライベートサブネットとは直接アクセスできないサブネットのことです。
RDSはプライベートサブネットに配置します。
RDSを構築するには後の「サブネットグループ」が必要であり、サブネットグループを設定するには、AZ(アベイラビリティーゾーン)が異なる2つのサブネットが必要となります。
手順は以下です
1.EC2と同じアベイラビリティゾーン内に、プライベートサブネットを1つ作成
2.EC2と異なるアベイラビリティゾーン内に、プライベートサブネットを1つ作成
■「VPC」→「サブネット」→「サブネットを作成」
1−1.プライベートサブネットの作成(EC2と同一のAZ)
プライベートサブネットを作成します
- VPC:「aws-vpc」を選択 ※作成したVPC
- サブネット名:aws-subnet-private01
- アベイラビリティーゾーン(AZ):ap-northeast-1a
- IPv4 VPC CIDR ブロック:10.0.0.0/16
- IPv4 サブネット CIDR ブロック:10.0.64.0/20
1−2.プライベートサブネットの作成(EC2と異なるAZ)
- VPC:「aws-vpc」を選択 ※作成したVPC
- サブネット名:aws-subnet-private02
- アベイラビリティーゾーン(AZ):ap-northeast-1c
- IPv4 VPC CIDR ブロック:10.0.0.0/16
- IPv4 サブネット CIDR ブロック:10.0.80.0/20
これで、2つのプライベートサブネットが作成されました
2.サブネットグループを作成
■「Aurora and RDS」→「サブネットグループ」→「DBサブネットグループを作成」
サブネットグループを作成します
- サブネットグループの詳細
- 名前:aws-subnet-gp
- 説明:任意の説明
- VPC:aws-vpc ※作成した自身のVPCを選択
- エンジンバージョン:ap-northeast-1a
- サブネットを追加
- アベイラビリティーゾーン
- ap-northeast-1a
- ap-northeast-1c
- サブネット
- aws-subnet-private01
- aws-subnet-private02
- アベイラビリティーゾーン
サブネットグループが作成されました
3.セキュリティグループを作成
RDSへ接続できる、セキュリティーグループを作成します
■「EC2」→「セキュリティグループ」→「セキュリティグループを作成」
- 基本的な詳細
- セキュリティグループ名:rdb-sg
- 説明:任意の説明
- VPC:aws-vpc ※作成した自身のVPCを選択
- インバウンドルール
- [MYSQL/Aurora]:TCP:3306:[カスタム]:[aws-sg-public]
- アウトバウンドルール:なし
ポイントはインバウンドルールの設定値です。
EC2には「aws-sg-public」のセキュリティーグループが設定されています。
RDSへの接続には、そのEC2に設定している「aws-sg-public」のみを許可します
通信の流れ
[あなたのPC]
👇️ SSH接続(22番ポート)
[EC2(aws-sg-public)] ← パブリックサブネット
👇️ DB接続(3306番ポート)
[RDS(rds-sg)] ← プライベートサブネット
EC2のセキュリティグループを指定することによる、メリットは以下です。
- IPアドレスの変動に強い(動的IP対応)
- EC2 はプライベートIPが変わる可能性があるため(再起動など)
- 将来的にEC2を増やすときにも便利
- 同じ aws-sg-public を別のEC2に付けるだけで、RDSへの接続許可が自動的に適用される
- セキュリティ的にも良い
- 特定のIP(例: 0.0.0.0/0 や CIDR)よりも、AWSが推奨する方法であるため
4.データベースの作成
■「Aurora and RDS」→「データベース」→「データベースを作成」
- データベース作成方法を選択:標準作成
- エンジンのオプション
- エンジンのタイプ:MySQL
- エディション:MySQL Community
- エンジンバージョン:MysQL 8.0.41
- テンプレート:無料利用枠
- 可用性と耐久性:シングル AZ DB インスタンスデプロイ(1 インスタンス)
- 設定
- DB インスタンス識別子: 任意のDB名
- マスターユーザー名:任意のユーザー名
- 認証情報管理:セルフマネージド
- マスターパスワード:任意のパスワード
- インスタンスの設定
- DB インスタンスクラス:db.t3.micro
- ストレージ
- ストレージタイプ:汎用SSD(gp2)
- ストレージ割り当て:20GiB
- 接続
- コンピューティングリソース:EC2 コンピューティングリソースに接続しない
- ネットワークタイプ:IPv4
- Virtual Private Cloud (VPC):aws-vpc ※作成した自身のVPCを選択
- DBサブネットグループ:aws-subnet-gp
- パブリックアクセス:なし
- VPC セキュリティグループ:
- 既存の選択(default)
- rds-sg ※上記で作成したRDS用セキュリティーグループを選択
- アベイラビリティーゾーン:ap-northeast-1a
- データベース認証
- データベース認証オプション:パスワード認証
- ※以後の設定はデフォルトを選択
データベースが作成されました
5.EC2と連携
5−1.EC2にMySQLインストール
EC2からRDSへ接続するためにはmysql
コマンドが必要となります
MySQLインストール等の設定については、
以下の記事の 「MySQLインストール」と「MySQLの設定」の「1.起動」 までを参考ください
5−2.EC2からRDS(MySQL)へ接続確認
RDSへ接続できるか確認します
接続に必要な情報は以下です(※RDSの作成時の情報)
- RDSのエンドポイント
- ユーザー名
- パスワード
👇️※RDSのエンドポイントはRDSの詳細画面に記載済
SSH接続でEC2へ接続後、、、
mysql -h RDSのエンドポイント -u ユーザー名 -p
パスワード入力すると、接続できました!
まとめ
今回は、RDSを構築しEC2へ連携する手順を解説しました
他にも記事をまとめていますので、よかったら参考にください
この記事が、少しでも皆さんのお役に立てれば嬉しいです
🔗 参考記事
■EC2へLaravelを構築
Discussion