MacでAWS RDSのMySQLデータベース構築したよ


参考サイト

まず、本件はこちらの方々の記事のいいところ取りです。
皆様の記事がなければ、ここまでできませんでした。
ありがとうございます。


では、はじめます。

VPCまわり

VPC作成

VPCクリック

VPC作成

VPCの設定
名前タグ:好きな名前
IPv4 CIDR ブロック : 10.0.0.0/16を利用

サブネット作成

[サブネット] > [サブネットの作成]

VPC ID : さっき作ったVPC

サブネット名:任意の名前
アベイラビリティーゾーン:任意の場所
IPv4 CIDR ブロック: 10.0.0.0/24

ルートテーブル作成

[ルートテーブル] > [ルートテーブルを作成]

ルートテーブル設定

名前:任意の名前
VPC:  さっき作ったVPC

インターネットゲートウェイ作成

[インターネットゲートウェイ] > [インターネットゲートウェイの作成]

名前タグ:任意

アクション > VPCとアタッチ

アタッチするVPSを選ぶ

[ルートテーブル] 

該当のルートテーブルをチェック
[ルートを編集]

[add Route]
送信先: 0.0.0.0/0
TARGET: 作成したIGWを選択

サブネットにルートテーブルを紐付け
サブネット 
> さっき作ったサブネットをチェック
> ルートテーブルタブ
> ルートテーブルの関連付けを編集

今回作ったルートテーブルを選択

EC2構築

コンソールからEC2の管理画面 > インスタンス

インスタンスを起動

AMIの選択。
無料利用枠にチェック
> Linux2 AMI(64bit)

任意だけど タグの追加

一番下は [すべてのICMP - IPv4]

起動

EC2へのSSH接続の確認

インスタンス状態が 実行中 になってから。
IPv4パブリックIPをコピー

ターミナル画面
ping + IPアドレス 入力し、
次の画面が表示されれば接続準備はOK

$ ping 13.230.153.4
PING 13.230.153.4 (13.230.153.4): 56 data bytes
64 bytes from 13.230.153.4: icmp_seq=0 ttl=235 time=71.973 ms
64 bytes from 13.230.153.4: icmp_seq=1 ttl=235 time=58.444 ms
64 bytes from 13.230.153.4: icmp_seq=2 ttl=235 time=98.557 ms
64 bytes from 13.230.153.4: icmp_seq=3 ttl=235 time=308.163 ms
64 bytes from 13.230.153.4: icmp_seq=4 ttl=235 time=186.163 ms

SSHの接続確認
先ほど作成したpemキーを.sshフォルダに移動
次のコマンドの手順で入力し、次の結果が表示されればEC2への接続が完了

$ mv Downloads/EC2-test.pem .ssh/      #pemキーを.sshフォルダに移動                          
$ sudo chmod 600 ~/.ssh/EC2-test.pem    #指定している鍵の権限が広すぎるため変更
$ ssh -i ~/.ssh/EC2-test.pem [email protected]  #pemキーとパブリックIPを使用

The authenticity of host '13.230.153.4 (13.230.153.4)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])?  
#ここは yesで回答 (未知のホスト鍵の場合こんな質問がある)


       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-0-200 ~]$

RDS設定

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

DBへのアクセスは既存のEC2のみアクセスするように設定。
[EC2]>[セキュリティグループ]>[セキュリティグループの作成]

セキュリティグループ名、説明、EC2があるVPCを設定
インバウンドルール
・タイプ: MYSQL/Aurora
・ソース: EC2のセキュリティグループ

DB用のサブネットの作成

RDSを利用するには、異るAZに属するサブネット2つを用意する必要があるので、DB用のサブネットを2つ作成し、この2つのサブネットは「1a」「1c」のAZを指定。
CIDRブロックの範囲は使用済みの数値は指定できない。

VPC >
サブネット > サブネットを作成

AZ(1a)のサブネットを作る

AZ(1c)のサブネットを作る

DB用のサブネットグループの作成

RDS > サブネットグループ > DB サブネットグループの作成

名前、説明、VPCやサブネットはEC2のあるところを選択し作成します。

データベースの作成

RDS > データベース > データベースの作成




あとはデフォルトどおりに
一番下にある「データベースの作成」をクリック

RDSへ接続

まずEC2に接続

$ssh -i ~/.ssh/EC2Testkey.pem [email protected]  #EC2接続

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-0-200 ~]$ sudo yum update -y  #EC2接続時に最初に実行

[ec2-user@ip-10-0-0-200 ~]$ sudo yum install mysql -y #MySQLのインストール

完了しました!
[ec2-user@ip-10-0-0-200 ~]$ 

AWSのコンソール画面に戻り、作成したRDSのエンドポイントをコピーします。

$ mysql -h aws-test.XXXXXXXX.ap-northeast-1.rds.amazonaws.com -u admin -p  #RDSのエンドポイントとRDS作成時のマスターユーザ名(admin)を使用
Enter password:〇〇〇〇〇〇〇〇     #RDS作成時のパスワード(いつものパスワードではないので注意)
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.20 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)]>  #exitで抜けます

以上、MySQL構築できました!

こんな感じでデータベースを作ります。

$ SET time_zone = 'Asia/Tokyo';
$ CREATE DATABASE project;
$ USE project;
$ CREATE TABLE users (id INT AUTO_INCREMENT, userId TEXT, branch TEXT, name TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id)) DEFAULT CHARSET=utf8;

$ SHOW tables;
+-------------------+
| Tables_in_project |
+-------------------+
| users             |
+-------------------+
1 row in set (0.01 sec)

$ DESCRIBE users;
+------------+-----------+------+-----+-------------------+-----------------------------------------------+
| Field      | Type      | Null | Key | Default           | Extra                                         |
+------------+-----------+------+-----+-------------------+-----------------------------------------------+
| id         | int       | NO   | PRI | NULL              | auto_increment                                |
| userId     | text      | YES  |     | NULL              |                                               |
| branch     | text      | YES  |     | NULL              |                                               |
| name       | text      | YES  |     | NULL              |                                               |
| created_at | timestamp | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED                             |
| updated_at | timestamp | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+------------+-----------+------+-----+-------------------+-----------------------------------------------+

$ INSERT INTO users (userID, branch, name) values ('000000','本店','山田太郎');

$ select * from users;
+----+--------+--------+--------------+---------------------+---------------------+
| id | userId | branch | name         | created_at          | updated_at          |
+----+--------+--------+--------------+---------------------+---------------------+
|  1 | 000000 | 本店   | 山田太郎     | 2021-06-13 05:11:59 | 2021-06-13 05:11:59 |
+----+--------+--------+--------------+---------------------+---------------------+