そろそろaws初めてみよか#3～RDSとの接続～

# はじめに

- [そろそろaws初めてみよか～まずは触れてみた～](https://qiita.com/imp555sti/items/08bef8d74985c2ea1f87)
- [そろそろaws初めてみよか#2～CodeStarによるコード修正からDeployまで～](https://qiita.com/imp555sti/items/9d04bfdbc3b89c1115f9)


前回CodeStarのIDE環境(Cloud9)からコード編集Deployまではうまく行きました。
今度はいよいよ失敗していた(=環境が整っていなかった)DB接続を試します。

# RDSの作成

RDSのコンソール画面の[データベースの作成]から作成します。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/6012e67e-65d2-cfe2-945d-95aa52532507.png)

今回はMariaDBにしてみました。
![02-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/d02d2a17-ce16-a5e8-e692-234675ba6372.png)
もちろん無料枠でDBインスタンス名、マスターユーザ名、マスターパスワードを入力します。
解説には`@`も逝けると書いてありますが、パスワードを確認欄のVaridationで弾かれるので`@`は無理っす
![02-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/0437f043-7bc5-204d-e66c-93d9c53a1758.png)
ここはデフォルトのまま
![02-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/07799a90-cbe5-fe94-3f09-941a77bb0b19.png)
接続をDefault VPCとしました。
![02-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/b2e18238-0293-e212-c2dc-6b1280bb4037.png)
で最後に[データベースの作成]を押せば5～10分位で出来上がります。
![02-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/2ef8dea5-2c76-2bec-2a10-b8e93019f689.png)

# RDSとの接続設定

このままではDefault VPCにCodeStarで作成したphp-laravelインスタンスとRDBインスタンスの疎通が取れません。
なぜならDefault VPCにMariaDBポートに対する接続設定が入っていないからです。これを設定していきます。

必要な情報は
- 接続元サーバとなるインスタンスのプライベートIP
- 接続先サーバで利用するポート番号

まずはCodeStarで作成したphp-laravelインスタンスのプライベートIPを確認します。
EC2ダッシュボードに移動し、インスタンスを表示します。
そうするとCodeStarのプロジェクト名-WebAppというインスタンスがいますのでそのプライベートIPをコピーしNodepadなどに書き写しておきます。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/3aa3a06a-f006-1421-f0d2-bd2a0343c193.png)

ポート番号はMariaDB標準から変えていないので3306ですね。(RDSの作成時に替えた場合はその値に)

RDSがぶら下がっているVPCからアクセスしましょうか。
Amazon RDSのダッシュボードに移り、データベースメニューからDB識別子のリンクをクリックします。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/41d4ff9f-0c04-1156-d62b-488c4f012ddb.png)
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/35fd5bef-537a-f7fe-e406-4e56b36e805e.png)
ここに出てくるVPC-セキュリティグループのリンクをクリックします。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/2d84d5a5-e43e-20e8-b124-cf50b38923c6.png)
EC2ダッシュボードのネットワーク＆セキュリティ＞セキュリティーグループにフィルターがかかった状態で遷移します。
画面下部のインバウンドをクリックし、先ほどのプライベートIPとポート番号を指定します。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/de3649bd-503c-d913-42b6-ce5e679116d5.png)

# RDSとの接続確認
では、CodeStarのプロジェクトのインスタンスにTeraTermで接続します。
初期状態ではmysqlのモジュールも入っていないのでインストールします。
※PHP実行サーバーに入れたくない！ってセキュリティ意識の高い方は別の運用用EC2を立ち上げ操作を行ってください。
　その際は、上のRDSとの接続で指定したインバウンドの他に運用用EC2のプライベートIPも定義してあげます。

コマンドが入っていないことの確認(笑)
`-h`で指定するホスト名はRDSダッシュボードのデータベース識別子を選択した後の画面にでるエンドポイントのホスト名です。

```console
[ec2-user@ip-172-31-29-127 phplaravel]$ mysql -u admin -p -h laravel-db.culgyynq9ap1.us-east-2.rds.amazonaws.com
-bash: mysql: command not found
```

```console
[ec2-user@ip-172-31-29-127 phplaravel]$ sudo yum install -y mysql
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                | 2.1 kB     00:00
amzn-updates                                             | 2.5 kB     00:00
Resolving Dependencies
--> Running transaction check
---> Package mysql.noarch 0:5.5-1.6.amzn1 will be installed
--> Processing Dependency: mysql55 >= 5.5 for package: mysql-5.5-1.6.amzn1.noarch
--> Running transaction check
---> Package mysql55.x86_64 0:5.5.62-1.23.amzn1 will be installed
--> Processing Dependency: real-mysql55-libs(x86-64) = 5.5.62-1.23.amzn1 for package: mysql55-5.5.62-1.23.amzn1.x86_64
--> Processing Dependency: mysql-config for package: mysql55-5.5.62-1.23.amzn1.x86_64
--> Running transaction check
---> Package mysql-config.x86_64 0:5.5.62-1.23.amzn1 will be installed
---> Package mysql55-libs.x86_64 0:5.5.62-1.23.amzn1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package           Arch        Version                  Repository         Size
================================================================================
Installing:
 mysql             noarch      5.5-1.6.amzn1            amzn-main         2.7 k
Installing for dependencies:
 mysql-config      x86_64      5.5.62-1.23.amzn1        amzn-updates       49 k
 mysql55           x86_64      5.5.62-1.23.amzn1        amzn-updates      7.5 M
 mysql55-libs      x86_64      5.5.62-1.23.amzn1        amzn-updates      816 k

Transaction Summary
================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 8.3 M
Installed size: 31 M
Downloading packages:
(1/4): mysql-5.5-1.6.amzn1.noarch.rpm                      | 2.7 kB   00:00
(2/4): mysql-config-5.5.62-1.23.amzn1.x86_64.rpm           |  49 kB   00:00
(3/4): mysql55-libs-5.5.62-1.23.amzn1.x86_64.rpm           | 816 kB   00:00
(4/4): mysql55-5.5.62-1.23.amzn1.x86_64.rpm                | 7.5 MB   00:00
--------------------------------------------------------------------------------
Total                                              9.9 MB/s | 8.3 MB  00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mysql55-libs-5.5.62-1.23.amzn1.x86_64                        1/4
  Installing : mysql-config-5.5.62-1.23.amzn1.x86_64                        2/4
  Installing : mysql55-5.5.62-1.23.amzn1.x86_64                             3/4
  Installing : mysql-5.5-1.6.amzn1.noarch                                   4/4
  Verifying  : mysql-5.5-1.6.amzn1.noarch                                   1/4
  Verifying  : mysql-config-5.5.62-1.23.amzn1.x86_64                        2/4
  Verifying  : mysql55-libs-5.5.62-1.23.amzn1.x86_64                        3/4
  Verifying  : mysql55-5.5.62-1.23.amzn1.x86_64                             4/4

Installed:
  mysql.noarch 0:5.5-1.6.amzn1

Dependency Installed:
  mysql-config.x86_64 0:5.5.62-1.23.amzn1   mysql55.x86_64 0:5.5.62-1.23.amzn1
  mysql55-libs.x86_64 0:5.5.62-1.23.amzn1

Complete!
[ec2-user@ip-172-31-29-127 phplaravel]$ 
```

気を取り直してもう一度。今度はちゃんと接続できました。

```console
[ec2-user@ip-172-31-29-127 phplaravel]$ mysql -u admin -p -h laravel-db.culgyynq9ap1.us-east-2.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 234
Server version: 5.5.5-10.2.21-MariaDB-log Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>
```

これでCodeStarのインスタンスからRDSへの接続が可能となりました。

# RDSにデータベースを作成する

ここはMariaDBのコマンドなので覚書です。

```sql
mysql> CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| laravel            |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

mysql> \q
Bye
```

これでlaravel用のDBのガワができました。
本当はマスターユーザではなくLaravel用データベース接続ユーザを作るべきでしょうが
そこはスルーしました。

# いよいよphp artisan migrate

ここまで来たらいよいよlaravelからDBをmigrateしてやります。
デフォルトの接続設定がローカルホストでしたのでまずは.envを書き換えます。

```console
[ec2-user@ip-172-31-29-127 ~]$ cd /var/www/phplaravel/
[ec2-user@ip-172-31-29-127 phplaravel]$ cat .env
APP_ENV=local
APP_KEY=base64:CHANGEMECHANGEMECHANGEMECHANGEMECHANGEMECHA=
APP_DEBUG=false
APP_LOG_LEVEL=error
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
[ec2-user@ip-172-31-29-127 phplaravel]$
```

これを書き換えます。具体的には以下の様にします。

| Env        | Value       |
|:-----------|:------------|
DB_CONNECTION|mysql
DB_HOST|laravel-db.culgyynq9ap1.us-east-2.rds.amazonaws.com
DB_PORT|3306
DB_DATABASE|laravel
DB_USERNAME|admin
DB_PASSWORD|***********


```console
[ec2-user@ip-172-31-29-127 phplaravel]$ vi .env
[ec2-user@ip-172-31-29-127 phplaravel]$ cat .env
APP_ENV=local
APP_KEY=base64:CHANGEMECHANGEMECHANGEMECHANGEMECHANGEMECHA=
APP_DEBUG=false
APP_LOG_LEVEL=error
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=laravel-db.culgyynq9ap1.us-east-2.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=admin
DB_PASSWORD=***********

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
[ec2-user@ip-172-31-29-127 phplaravel]$
```

ではお待ちかねのartisan migrate

```console
[ec2-user@ip-172-31-29-127 phplaravel]$ php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
[ec2-user@ip-172-31-29-127 phplaravel]$
```

はい。これでWeb+DBの環境は整いました！