初学者向け：AWSでシンプルなネットワーク構成を用いてEC2とRDSを接続してみた

## はじめに

本記事では、AWSを使用してEC2インスタンスを構築し、RDSに接続する手順を解説します。

:::note warn
***EC2とRDSは、クラウド環境でアプリケーションとデータベースを分離して管理する上で欠かせない重要なサービスです。***
:::

基本的な内容ですが、未来の自分への備忘録として、体系的にまとめています。

## 補足：AWSのネットワーク構成はシンプル
今回の技術検証では、EC2インスタンスを構築し、RDSに接続するというシンプルな構成で進めます。

![スクリーンショット 2024-12-21 10.50.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/672216bb-697f-b55c-0333-d1c046d25c9b.png)
引用画像：https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/tutorial-connect-ec2-instance-to-rds-database.html

この構成では、インターネットからアクセス可能なパブリックサブネットにEC2インスタンスを構築し、プライベートサブネットにRDSを配置します。

:::note
***これにより、アプリケーションサーバーとデータベースの分離を実現します。***
:::

今回の検証で使用するVPC構成は以下のとおりです。

![スクリーンショット 2024-12-21 10.52.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3a8ea04a-9d67-7921-6ff5-4dbe1b74149c.png)

## 前提条件

以下の準備が整っていることを前提に、技術検証を進めます。

:::note warn
- **AWSアカウント:** 
EC2およびRDSを操作する権限を持つIAMユーザーまたはロール。

- **ネットワーク構成:**
作成済みのVPCとサブネット。
必要なセキュリティグループの設定（後述）。

- **クライアント端末:** 
SSH接続ができる環境。

- **ソフトウェア:** 
EC2インスタンスで使用するMySQLクライアント。
:::

***また、VPCの作成方法については、以下の記事で詳しく説明していますので、必要に応じて参考にしてみてください！***

https://qiita.com/free-honda/items/9513ef83f189b29f4796

## EC2インスタンスの構築

### インスタンスの作成

AWS Management ConsoleでEC2サービスを開き、新しいインスタンスを作成します。名前とAMI（ここではAmazon Linux 2）を選択して、以下の画面のように進めてください。

![スクリーンショット 2024-12-21 10.55.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/89f77300-f03c-4d7f-31fa-75073a897687.png)

今回は、EC2 Instance Connectというサービスを使用するため、キーペアの設定は不要です。

![スクリーンショット 2024-12-21 10.58.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/cba441a2-6c2b-ac96-285e-9d3606ab3f61.png)

ネットワーク設定については、事前に作成したVPCとパブリックサブネットを選択して、パブリックIPの自動割り当てを有効にします。

:::note
***セキュリティグループについては、デフォルトのままで大丈夫です（後ほど詳細に設定を説明します）。***
:::

### 必要なソフトウェアのインストール

次に、EC2 Instance Connectを使用してインスタンスに接続し、必要なソフトウェアをインストールします。

https://qiita.com/free-honda/items/90fddc7b90246f4d3719

対象のインスタンスを選択し、「接続」ボタンをクリックし、「EC2 Instance Connect を使用して接続する」を選択します。

![スクリーンショット 2024-12-21 11.03.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/79907cea-1847-28e9-14d0-abff649c8051.png)

インスタンスにSSHで接続後、以下のコマンドを実行してMySQLクライアントをインストールします。

```bash
sudo yum update -y
sudo yum install -y mysql
```

コマンド実行後に以下のように「```Complete!```」と表示されれば、インストールは正常に完了しています。

![スクリーンショット 2024-12-21 11.05.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/72ebd923-a944-d0a4-1084-b17d56c60f94.png)

## RDSインスタンスの作成

### RDSの設定

AWS Management ConsoleでRDSサービスを開き、「データベースの作成」をクリックします。

![スクリーンショット 2024-12-21 11.08.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/fc4bf102-149b-76cf-223d-e3f06b8a5ff4.png)

「簡単作成」を選択し、無料利用枠を使用して進めます（**無料利用枠の期間が終了している場合、課金対象となります**）。

![スクリーンショット 2024-12-21 11.12.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/07afeb08-8686-658b-fe5e-376ce2261650.png)

パスワードは自動生成を選択します。

:::note alert
***作成中のバナーに表示される「認証情報の詳細を表示」をクリックすると、自動生成されたパスワードを確認できます。***
:::

***よくカスタムパスワードを紛失するケースが多いため、忘れそうな人は、以下の記事を参考にしてください！***

https://qiita.com/free-honda/items/66fff2535f5c54792051

### RDSとEC2の接続セットアップ

上記の手順に沿って、作成をしていくとEC2 接続をセットアップするというオプションがありますので、ここを設定していきます。

![スクリーンショット 2024-12-21 11.17.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a5d8f3ba-2dfc-80b1-7578-d07f6dab29de.png)

***このオプションを選択することにより、コンピューティングリソースがこのデータベースに接続できるように、接続設定が自動的に変更されます。***

## セキュリティグループの確認

### RDSセキュリティグループの設定

RDSに関連付けられたセキュリティグループのインバウンドルールを編集し、以下の設定を追加してください。


| タイプ         | プロトコル | ポート範囲 | ソース                             |
|----------------|------------|------------|-----------------------------------|
| MYSQL/Aurora   | TCP        | 3306       | sg-xxx / ec2-rds-1 |
| カスタム TCP   | TCP        | 0          | sg-xxx / ec2-rds-1 |

RDSでMySQLを使用する場合、ポート3306を開放する必要があります。

:::note warn
***EC2インスタンスのセキュリティグループIDをソースとして指定してください（設定を忘れないよう注意してください）。***
:::

### EC2セキュリティグループの設定

EC2インスタンスでは、SSH接続ができることが重要です。セキュリティグループのインバウンドルールで、以下を確認または設定してください。


| タイプ | プロトコル | ポート範囲 | ソース    |
|--------|------------|------------|----------|
| SSH    | TCP        | 22         | 0.0.0.0/0 |

:::note alert
***ソースで全てを許可していますが、セキュリティを考慮し、必要に応じてソースIPアドレスを絞り込むことを推奨します。***
:::

## 実際にEC2からRDSに接続してみた

### 接続テスト

EC2インスタンスにEC2 Instance Connectを利用してSSH接続します。以下のコマンドを実行して、RDSに接続します。

```
mysql -h <RDSエンドポイント> -u admin -p
```

パスワードを入力後、以下のような画面が表示されれば接続成功です。

```bash
[ec2-user@ip-10-0-10-67 ~]$ mysql -h rds.c586grpu6rv9.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 8.0.39 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
```

### データベース操作の検証

次に、簡単なSQL文を使ってCRUD操作が正常に行えるか確認します。

```sql
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100));
INSERT INTO users (name) VALUES ('Alice'), ('Bob');
SELECT * FROM users;
```

正常にデータベース操作ができると、以下のような出力が得られます。

```sql
MySQL [testdb]> SELECT * FROM users;
+----+-------+
| id | name  |
+----+-------+
|  1 | Alice |
|  2 | Bob   |
+----+-------+
2 rows in set (0.00 sec)

MySQL [testdb]> 
```

***少し画面が見づらいかもしれませんが、以下のスクリーンショットのように、すべての操作が成功しました！***

![スクリーンショット 2024-12-21 11.41.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f1c5b7d6-5d2c-c608-5289-4264ecd83ad3.png)

## まとめ

ここまでお読みいただき、ありがとうございました！

本記事では、AWSを使用してEC2インスタンスを構築し、RDSに接続する手順を解説しました。

:::note
***特に、セキュリティグループの設定など、見落としがちな項目についても触れていますので、作業の際は慎重に確認することをおすすめします。***
::::

この記事が、どなたかの技術的な支えになれば幸いです。

## 関連記事

https://qiita.com/free-honda/items/e9cbaadb13c79a03b14f

https://qiita.com/free-honda/items/9513ef83f189b29f4796

https://qiita.com/free-honda/items/d20fb420b98eb99bcddd