はじめに
これはシリーズ記事の中の1つです。
AWSでウェブアプリケーション環境構築:⓪概要
AWSでウェブアプリケーション環境構築:①EC2インスタンスにwebサーバを構築
AWSでウェブアプリケーション環境構築:②RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成を構築
↑↑↑現在の記事↑↑↑
AWSでウェブアプリケーション環境構築:③ロードバランサーを作成し、webサーバを冗長化する
AWSでウェブアプリケーション環境構築:④ElastiCacheのRedisを作成し、セッション共有可能にする
AWSでウェブアプリケーション環境構築:⑤webサーバをプライベートサブネットに配置し、メンテナンス用踏み台サーバを構築
AWSでウェブアプリケーション環境構築:⑥Route53を利用して独自ドメインでアクセス可能にする
AWSでウェブアプリケーション環境構築:⑦ACMを利用してHTTPS通信可能にする
AWSでウェブアプリケーション環境構築:⑧サーバ負荷に応じてwebサーバがオートスケーリングする仕組みを構築
前回まで
EC2インスタンスにApacheをインストールし、
ブラウザからアクセスしてApacheのテストページが表示されるところまで構築しました。
今回構築する環境
前回構築した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か所を変更します。
#↓コメントアウト
#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を入力してアクセスし、
この画面が表示されれば正常にセットアップできています。
Laravelサンプルアプリ画面右上の[Register]ボタンをクリックしてアカウント登録ページを開き、
任意の値を入力して[Register]ボタンをクリックすると、
PDOExceptionが発生すると思います。
これは、まだDBが存在しないにもかかわらず
LaravelプログラムがDB接続しようとしているため発生しています。
次にDBを作成するため、
今はこの状態で問題ないです。
RDSでDB構築
ネットワーク構築
DB自体を構築する前に、
それを配置するためのネットワークを作成する必要があります。
サーバ構成図にある[private]と書かれたサブネット2つです。
※privateサブネットを2つ作成する理由は後述します。
privateサブネット作成
マネジメントコンソールの[VPC]のページの
サイドメニューの[サブネット]をクリックし、
上部にある[サブネットの作成]ボタンをクリック。
項目 | 設定値 | 説明 |
---|---|---|
名前タグ | 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つ目を作成
先ほどと同じようにサブネット作成ページにいき、
下記のように設定します。
項目 | 設定値 | 説明 |
---|---|---|
名前タグ | 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]ボタンをクリック。
項目 | 設定値 | 説明 |
---|---|---|
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サブネットグループの作成]ボタンをクリック。
[サブネットグループの詳細]
項目 | 設定値 | 説明 |
---|---|---|
名前 | 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]ボタンをクリック。
項目 | 設定値 | 説明 |
---|---|---|
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]をクリック。
項目 | 設定値 | 説明 |
---|---|---|
タイプ | MYSQL/Aurora | - |
ソース | {以前作成した[laravel-sample-sg-web]のセキュリティグループID} | セキュリティグループのソース(アクセス元)は、IPアドレスだけでなくセキュリティグループを指定することも可能。 今回はwebサーバの属するセキュリティグループをソースとして指定する。 |
この設定で、
webサーバからのMySQL(ポート3306)接続のみ許可するルールのセキュリティグループができました。
DB構築
Laravelサンプルアプリのデータを格納するための
DBサーバをRDSで構築します。
[RDS]のダッシュボードページにある[データベースの作成]ボタンをクリック。
エンジンの選択
今回はMySQLを選択します。
また、ページ下部にある[RDS 無料利用枠の対象オプションのみを有効化]にチェックを入れます。
DB 詳細の指定
[インスタンスの仕様]の各項目はすべてデフォルトで問題ないです。
[設定]の各項目は下記のように設定します。
項目 | 設定値 | 説明 |
---|---|---|
DB インスタンス識別子 | laravel-sample-db | インスタンス作成されたときに、DBエンドポイントとして利用される値。 |
マスターユーザの名前 | root | DBに作成されるマスターユーザ名。 |
マスターパスワード | {任意のパスワード} | マスターユーザのパスワード。 |
マスターユーザの名前とマスターパスワードは、
DBに接続する際に利用する情報なので忘れないようにしてください。
[詳細設定]の設定
下記の項目を間違えないように設定し、
それ以外はデフォルトのままで問題ないです。
項目 | 設定値 | 説明 |
---|---|---|
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]ボタンからアカウント登録ページにアクセスし、
アカウント登録します。
問題なくアカウント登録できました。
ログイン機能やタスク登録機能も問題なく動作しています。
これで、
RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成が構築完了しました。