32
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSでウェブアプリケーション環境構築:②RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成を構築

Last updated at Posted at 2019-01-24

はじめに

これはシリーズ記事の中の1つです。

AWSでウェブアプリケーション環境構築:⓪概要
AWSでウェブアプリケーション環境構築:①EC2インスタンスにwebサーバを構築
AWSでウェブアプリケーション環境構築:②RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成を構築
↑↑↑現在の記事↑↑↑
AWSでウェブアプリケーション環境構築:③ロードバランサーを作成し、webサーバを冗長化する
AWSでウェブアプリケーション環境構築:④ElastiCacheのRedisを作成し、セッション共有可能にする
AWSでウェブアプリケーション環境構築:⑤webサーバをプライベートサブネットに配置し、メンテナンス用踏み台サーバを構築
AWSでウェブアプリケーション環境構築:⑥Route53を利用して独自ドメインでアクセス可能にする
AWSでウェブアプリケーション環境構築:⑦ACMを利用してHTTPS通信可能にする
AWSでウェブアプリケーション環境構築:⑧サーバ負荷に応じてwebサーバがオートスケーリングする仕組みを構築

前回まで

1.png

EC2インスタンスにApacheをインストールし、
ブラウザからアクセスしてApacheのテストページが表示されるところまで構築しました。

今回構築する環境

2.png

前回構築したwebサーバにLaravelサンプルプログラムをのせ、
RDSでDBを作成し、
Laravelサンプルアプリが動作する環境を構築します。

webサーバにLaravel環境構築

前回作成したwebサーバにSSHログインし、
下記の手順にそってセットアップしていきます。

PHPインストール

#PHPインストール
sudo amazon-linux-extras install -y php7.2
#PHP拡張モジュールインストール
sudo yum -y install php-devel php-pdo php-mbstring php-mcrypt php-mysqlnd php-xml php-gd php-opcache php-pecl-zip

Laravelサンプルプログラム取得

#gitインストール
sudo yum -y install git
#Laravelサンプルアプリをクローン
sudo chmod 777 /var/www/html
git clone https://github.com/laravel/quickstart-intermediate.git /var/www/html/laravel-sample
#Laravelディレクトリパーミッション変更(Laravelが動作するために必要な設定)
cd /var/www/html/laravel-sample
sudo chmod -R 777 bootstrap/cache
sudo chmod -R 777 storage

composer install

#Composer自体のインストール
cd ~
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
#laravel-sample配下でcomposer install
cd /var/www/html/laravel-sample
composer install

Apache設定変更

・ドキュメントルート変更
・リライト有効化
の2つの設定変更を行います。

#Apache設定ファイルを開く
sudo vim /etc/httpd/conf/httpd.conf

これで開いた設定ファイルの下記の2か所を変更します。

httpd.conf
#↓コメントアウト
#DocumentRoot "/var/www/html"
#↓追記
DocumentRoot "/var/www/html/laravel-sample/public"

###~~略~~###
<Directory "/var/www/html">

    #↓コメントアウト
    #AllowOverride None
    #↓追記
    AllowOverride All

Apacheを再起動します。

sudo systemctl restart httpd

これで、Laravel動作用のセットアップは完了です。
ブラウザにサーバのパブリックIPを入力してアクセスし、
この画面が表示されれば正常にセットアップできています。
screencapture-18-191-154-46-2019-01-24-15_45_54.png

Laravelサンプルアプリ画面右上の[Register]ボタンをクリックしてアカウント登録ページを開き、
任意の値を入力して[Register]ボタンをクリックすると、
PDOExceptionが発生すると思います。
screencapture-18-191-154-46-register-2019-01-24-15_48_43.png

これは、まだDBが存在しないにもかかわらず
LaravelプログラムがDB接続しようとしているため発生しています。

次にDBを作成するため、
今はこの状態で問題ないです。

RDSでDB構築

ネットワーク構築

DB自体を構築する前に、
それを配置するためのネットワークを作成する必要があります。
サーバ構成図にある[private]と書かれたサブネット2つです。
※privateサブネットを2つ作成する理由は後述します。

privateサブネット作成

マネジメントコンソールの[VPC]のページの
サイドメニューの[サブネット]をクリックし、
上部にある[サブネットの作成]ボタンをクリック。

下記のように設定します。
screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-16_15_29.png

項目 設定値 説明
名前タグ laravel-sample-subnet-private-a このサブネットの名前。
自分が管理するための任意の名前を付ける。
VPC {以前作成した[laravel-sample-vpc]のVPC} このサブネットが作られるVPC。
アベイラビリティーゾーン us-east-2a このサブネットが作られるアベイラビリティーゾーン。
IPv4 CIDR ブロック 10.0.1.0/24 IPv4 CIDRブロック。
実際は、必要なネットワークの大きさを考慮して決定する。

privateサブネット2つ目を作成

先ほどと同じようにサブネット作成ページにいき、
下記のように設定します。
screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-16_22_02.png

項目 設定値 説明
名前タグ laravel-sample-subnet-private-b -
VPC {以前作成した[laravel-sample-vpc]のVPC} -
アベイラビリティーゾーン us-east-2b 先ほどのサブネットとは別のアベイラビリティーゾーンにします。
IPv4 CIDR ブロック 10.0.2.0/24 -

ルートテーブル作成・サブネットに適用

実際にはデフォルトで作成されているルートテーブルのままでも動作に問題ありませんが、
勉強のため、管理のしやすさのために
自分で名前を付けてprivateサブネット用のルートテーブルを作成します。

ルートテーブルの作成

[VPC]のページの
サイドメニューの[ルートテーブル]をクリックし、
上部にある[Create route table]ボタンをクリック。

下記のように設定します。
screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-16_27_11.png

項目 設定値 説明
Name tag laravel-sample-route-table-private このルートテーブルの名前。
自分が管理するための任意の名前を付ける。
VPC {以前作成した[laravel-sample-vpc]のVPC} このルートテーブルが作られるVPC。

ルートテーブルをサブネットに関連付け

サブネットの一覧で先ほど作成した[laravel-sample-subnet-private-a]をチェックし、
ページ上部の[アクション]→[ルートテーブルの変更]をクリック。

[ルートテーブルID]に先ほど作成した[laravel-sample-route-table-private]のルートテーブルを設定する。

[laravel-sample-subnet-private-b]のサブネットも同様に
[laravel-sample-route-table-private]のルートテーブルを関連付ける。

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

この後、RDSでDBサーバを構築するときに、
インスタンスを所属させるためのサブネットグループというものを用意する必要があります。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.Subnets

各 DB サブネットグループには、特定のリージョン内の少なくとも 2 つのアベイラビリティーゾーンにサブネットが必要です。 VPC に DB インスタンスを作成するときに、DB サブネットグループを選択する必要があります。

ここにあるように、
RDSインスタンスを作成する際はサブネットグループを指定する必要があり、
そのサブネットグループを作成するには複数のサブネットを指定する必要があります。
そのため、前の作業で2つのprivateサブネットを作成していました。

[RDS]のページの
サイドメニューの[サブネットグループ]をクリックし、
右上部にある[DBサブネットグループの作成]ボタンをクリック。

下記のように設定します。
screencapture-us-east-2-console-aws-amazon-rds-home-2019-01-24-17_21_18.png

[サブネットグループの詳細]

項目 設定値 説明
名前 laravel-sample-subnet-group このサブネットグループの名前。
自分が管理するための任意の名前を付ける。
説明 laravel-sample-subnet-group 任意の説明文。
VPC {以前作成した[laravel-sample-vpc]のVPC} このサブネットグループが作られるVPC。

[サブネットの追加]
先ほど作成した
[laravel-sample-subnet-private-a]

[laravel-sample-subnet-private-b]
のサブネットを選択し、追加する。

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

DBサーバに適用するためのセキュリティグループを事前に作成しておきます。

[VPC]のページの
サイドメニューの[セキュリティグループ]をクリックし、
上部にある[Create security group]ボタンをクリック。

下記のように設定します。
screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-16_36_47.png

項目 設定値 説明
Security group name laravel-sample-sg-rds このセキュリティグループの名前。
自分が管理するための任意の名前を付ける。
Description laravel-sample-sg-rds 任意の説明文。
VPC {以前作成した[laravel-sample-vpc]のVPC} このセキュリティグループが作られるVPC。

作成したセキュリティグループのルールを修正します。

セキュリティグループの一覧で先ほど作成した[laravel-sample-sg-rds]をチェックし、
ページ上部の[アクション]→[Edit inbound rules]をクリック。

下記のように設定します。
screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-16_42_04.png

項目 設定値 説明
タイプ MYSQL/Aurora -
ソース {以前作成した[laravel-sample-sg-web]のセキュリティグループID} セキュリティグループのソース(アクセス元)は、IPアドレスだけでなくセキュリティグループを指定することも可能。
今回はwebサーバの属するセキュリティグループをソースとして指定する。

この設定で、
webサーバからのMySQL(ポート3306)接続のみ許可するルールのセキュリティグループができました。

DB構築

Laravelサンプルアプリのデータを格納するための
DBサーバをRDSで構築します。

[RDS]のダッシュボードページにある[データベースの作成]ボタンをクリック。

エンジンの選択

今回はMySQLを選択します。
また、ページ下部にある[RDS 無料利用枠の対象オプションのみを有効化]にチェックを入れます。
screencapture-us-east-2-console-aws-amazon-rds-home-2019-01-24-16_54_01.png

DB 詳細の指定

下記のように設定します。
screencapture-us-east-2-console-aws-amazon-rds-home-2019-01-24-16_55_37.png

[インスタンスの仕様]の各項目はすべてデフォルトで問題ないです。

[設定]の各項目は下記のように設定します。

項目 設定値 説明
DB インスタンス識別子 laravel-sample-db インスタンス作成されたときに、DBエンドポイントとして利用される値。
マスターユーザの名前 root DBに作成されるマスターユーザ名。
マスターパスワード {任意のパスワード} マスターユーザのパスワード。

マスターユーザの名前とマスターパスワードは、
DBに接続する際に利用する情報なので忘れないようにしてください。

[詳細設定]の設定

下記のように設定します。
screencapture-us-east-2-console-aws-amazon-rds-home-2019-01-24-17_30_24.png

下記の項目を間違えないように設定し、
それ以外はデフォルトのままで問題ないです。

項目 設定値 説明
Virtual Private Cloud(VPC) {以前作成した[laravel-sample-vpc]のVPC} このインスタンスが作られるVPC。
サブネットグループ {先ほど作成した[laravel-sample-subnet-group]のサブネットグループ} このインスタンスが作られるサブネットグループ。
VPCセキュリティグループ {先ほど作成した[laravel-sample-sg-rds]のセキュリティグループ} このインスタンスに適用されるセキュリティグループ。
データベースの名前 laravel_sample_db このインスタンスに初期作成されるデータベースの名前。

[データベースの名前]はDB接続する際に利用する情報なので忘れないようにしてください。

最後に[データベースの作成]ボタンをクリックすれば作成完了です。

LaravelのDB接続設定

DBサーバの構築が完了したので、
Laravelの設定を変更して
実際にLaravelサンプルアプリでDBに接続します。

.envの設定変更

webサーバにSSHログインし、
下記の設定を行います。

cd /var/www/html/laravel-sample
sudo vim .env

この.envファイルの下記4項目を変更します。

項目 設定値 説明
DB_HOST {先ほど作成した[laravel-sample-db]のRDSのエンドポイント} 先ほど作成したRDSインスタンスの詳細ページで確認する。
DB_DATABASE laravel_sample_db 先ほど自分で設定したデータベース名
DB_USERNAME root 先ほど自分で設定したDBマスターユーザ名
DB_PASSWORD {先ほど作成した[laravel-sample-db]のマスターパスワード} 先ほど自分で設定したDBマスターパスワード

migrationの実行

migrationを実行してみます。

php artisan migrate

これでエラーがでなければ正常にDB接続できています。

サンプルアプリ動作確認

サンプルアプリの右上の[Register]ボタンからアカウント登録ページにアクセスし、
アカウント登録します。
screencapture-18-217-195-159-register-2019-01-24-17_49_29.png

問題なくアカウント登録できました。
ログイン機能やタスク登録機能も問題なく動作しています。

これで、
RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成が構築完了しました。

次回

AWSでウェブアプリケーション環境構築:③ロードバランサーを作成し、webサーバを冗長化する

32
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?