はじめに
前回CodeStarのIDE環境(Cloud9)からコード編集Deployまではうまく行きました。
今度はいよいよ失敗していた(=環境が整っていなかった)DB接続を試します。
RDSの作成
RDSのコンソール画面の[データベースの作成]から作成します。
今回はMariaDBにしてみました。
もちろん無料枠でDBインスタンス名、マスターユーザ名、マスターパスワードを入力します。
解説には@
も逝けると書いてありますが、パスワードを確認欄のVaridationで弾かれるので@
は無理っす
ここはデフォルトのまま
接続をDefault VPCとしました。
で最後に[データベースの作成]を押せば5~10分位で出来上がります。
RDSとの接続設定
このままではDefault VPCにCodeStarで作成したphp-laravelインスタンスとRDBインスタンスの疎通が取れません。
なぜならDefault VPCにMariaDBポートに対する接続設定が入っていないからです。これを設定していきます。
必要な情報は
- 接続元サーバとなるインスタンスのプライベートIP
- 接続先サーバで利用するポート番号
まずはCodeStarで作成したphp-laravelインスタンスのプライベートIPを確認します。
EC2ダッシュボードに移動し、インスタンスを表示します。
そうするとCodeStarのプロジェクト名-WebAppというインスタンスがいますのでそのプライベートIPをコピーしNodepadなどに書き写しておきます。
ポート番号はMariaDB標準から変えていないので3306ですね。(RDSの作成時に替えた場合はその値に)
RDSがぶら下がっているVPCからアクセスしましょうか。
Amazon RDSのダッシュボードに移り、データベースメニューからDB識別子のリンクをクリックします。
ここに出てくるVPC-セキュリティグループのリンクをクリックします。
EC2ダッシュボードのネットワーク&セキュリティ>セキュリティーグループにフィルターがかかった状態で遷移します。
画面下部のインバウンドをクリックし、先ほどのプライベートIPとポート番号を指定します。
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の環境は整いました!