Help us understand the problem. What is going on with this article?

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

はじめに

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

RDSの作成

RDSのコンソール画面の[データベースの作成]から作成します。
01.png

今回はMariaDBにしてみました。
02-1.png
もちろん無料枠でDBインスタンス名、マスターユーザ名、マスターパスワードを入力します。
解説には@も逝けると書いてありますが、パスワードを確認欄のVaridationで弾かれるので@は無理っす
02-2.png
ここはデフォルトのまま
02-3.png
接続をDefault VPCとしました。
02-4.png
で最後に[データベースの作成]を押せば5~10分位で出来上がります。
02-5.png

RDSとの接続設定

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

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

まずはCodeStarで作成したphp-laravelインスタンスのプライベートIPを確認します。
EC2ダッシュボードに移動し、インスタンスを表示します。
そうするとCodeStarのプロジェクト名-WebAppというインスタンスがいますのでそのプライベートIPをコピーしNodepadなどに書き写しておきます。
01.png

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

RDSがぶら下がっているVPCからアクセスしましょうか。
Amazon RDSのダッシュボードに移り、データベースメニューからDB識別子のリンクをクリックします。
02.png
03.png
ここに出てくるVPC-セキュリティグループのリンクをクリックします。
04.png
EC2ダッシュボードのネットワーク&セキュリティ>セキュリティーグループにフィルターがかかった状態で遷移します。
画面下部のインバウンドをクリックし、先ほどのプライベートIPとポート番号を指定します。
05.png

RDSとの接続確認

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

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

[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
[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]$ 

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

[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のコマンドなので覚書です。

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を書き換えます。

[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 ***********
[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

[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の環境は整いました!

imp555sti
SEで小規模Web開発を行っていましたが激務が災いして病休。その後復職しましたが今は開発SEから運用に配置換えして基本的には平和な日々(のはず…)を送っています(笑) と思っていたら開発にお呼びがかかり…開発に戻されましたとさ…どうなることやら(苦笑)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした