AWSで動的サイトの構築

## 概要
AWS上にカスタムVPCを設定してその上に、WordPressを使用した動的サイトを構築した時のメモ

## 構成
・カスタムVPC上にネットワーク上にWordPressを稼働させるEC2インスタンスとWordPressが使用するMySQLのRDSインスタンスを配置
・冗長化構成によるロードバランシング

![str.png](https://qiita-image-store.s3.amazonaws.com/0/234299/b9280a70-5e01-456d-8184-3c445b1a9fe6.png)

## カスタムVPCの構築
AWSコンソール→VPCダッシュボード→VPCの作成
ウィザード形式で簡単に作れるが、勉強のためウィザードを使用せずに進める。

AWSコンソール→VPCダッシュボード→VPC→VPCの作成
①VPCネットワークの作成
　名前タグ：test-vpc
　IPv4　CIDRブロック設定：10.0.0.0/16
　テナンシー：デフォルト
  VPC作成後にメニューから、DNSホスト名の編集：「はい」
②サブネットの作成
　VPC→サブネット→サブネットの作成
  4つのサブネットを作成する
  名前タグ　　　　　　　VPC         AZ                IPv4　CIDRブロック
  test-public-A  /   test-vlc/   ap-northeast-1a/    10.1.11.0/24
  test-private-A /   test-vpc/   ap-northeast-1a/    10.1.15.0/24
  test-public-C  /   test-vpc/   ap-northeast-1c/    10.1.51.0/24
  tes-private-C  /   test-vpc/   ap-northeast-1c/    10.1.55.0/24

　test-public-Aとtest-public-Cは、パブリックIPが自動的に付与されるように設定する。
　一覧のメニュー→クリックで自動割当IP設定の変更でIPの自動割当にチェックを入れる。

③インタネットゲートウェイの作成（構成のGWに相当するもの)
　VPC→インタネットゲートウェイ→インターネットゲートウェイの作成
  名前タグ:test-InternetGateway
　作成したインタネットゲートウェイを作成したカスタムVPC(test-vpc)にアタッチする。

④ルートテーブルの作成
 パブリックサブネット用にインタネットゲートウェイをルーティングするルートテーブルの作成
 VPC->ルートテーブル→ルートテーブルの作成
 名前タグ:test-publicRouteTable
 VPC:test-vpc
 test-publicRouteTableのルートの追加。
 ターゲットにはtest-InternetGatewayを指定する。

　![スクリーンショット 2018-08-12 13.50.46.png](https://qiita-image-store.s3.amazonaws.com/0/234299/3c52bcba-5ec0-8503-275f-254bc1ddaf6b.png)

　test-publicRouteTableをtest-public-Aとtest-public-Cのルートテーブルとして設定する。
　VPCダッシュボード→サブネット→test-public-Aとtest-public-Cそれぞれのルートテーブルを
　test-publicRouteTableにする。

　![スクリーンショット 2018-08-12 14.03.03.png](https://qiita-image-store.s3.amazonaws.com/0/234299/dfde54bb-e0ec-4f1f-2748-99a1d13f4f3d.png)

⑥セキュリティグループの設定
　wordpress用とDB用のセキュリティグループの設定
　VPC→セキュリティグリープ→セキュリティグループの設定
　名前タグ：wordpress用(WP-Web-DMZ)とDB用(WP-DB)
　グループ名:WP-Web-DMZ, WP-DB
　vpc：test-vpc


　WP-Web-DMZのセキュリティグループの設定
　![スクリーンショット 2018-08-12 14.17.08.png](https://qiita-image-store.s3.amazonaws.com/0/234299/6fb3cd26-0296-aa2a-b3a4-e6e301acd9c5.png)

　WP-DBのセキュリティグループの設定
  ![スクリーンショット 2018-08-12 14.19.21.png](https://qiita-image-store.s3.amazonaws.com/0/234299/46d0ff5e-38f7-fe8e-9882-ec6d5d156ced.png)



⑦DBサブネットグループの設定
　VPC上でRDBインスタンスを使用する場合、DBサブネットグループの作成が必要。
　Relational Database Service → サブネットグループ　→　DBサブネットグループ
　名前：wp-dbsublent
　vpc：test-vlc

　アバイラビィティーゾーンに追加するAZ(ap-northeat-1aとap-northeat-1c)を追加する。
　![スクリーンショット 2018-08-12 14.24.00.png](https://qiita-image-store.s3.amazonaws.com/0/234299/b1b302b8-9ad8-90b7-cb9e-48ad9b3abb99.png)


## RDSのインスタンス作成
　Relational Database Service → 　インスタンス　→　DBインスタンスの起動
　以下の項目を選択
　エンジンのオプション：MySQL
  ユースケース：本番稼動用　- MySQL

  DBの詳細設定
　　DBエンジンバージョン：MySQL 5.6.39
   DB インスタンスのクラス：db.t2.micro
　　マルチAZ配置：別ゾーンにレプリカを作成

  詳細設定（設定）
   DBインスタンス識別子：wp-mysql
   マスターユーザーの名前：root
   マスターバスワード：****
   パスワードの確認：****

  ![スクリーンショット 2018-08-12 14.39.12.png](https://qiita-image-store.s3.amazonaws.com/0/234299/a1d5b0e9-f607-fcc4-52d6-df5184d5ea26.png)


## EC2インスタンス起動
  WordPressを稼動させるためのEC2インスタンスを生成する。
  AMI：Amazon Linux AMI
　ネットワーク：vpc-test
  サブネット：test-public-A
  自動割当パブリックIP：有効
  Nameタグ：WP-WebAPP
  セキュリティグループ：WP-Web-DMZ

  起動詳細は、https://qiita.com/hanasaku/items/b112cdef5e07ecdee4ff

## WordPressのインストール
```
chmod 0600 was-key.pem
ssh -i was.key.pem ec2-user@<パブリックDNS名>

sudo yum install php php-mysql php-gb php-mbstring -y
sudo yum install mysql -y
wget -O /tmp/wordpress-4.9.4-ja.tar.gz https://ja.wordpress.org/wordpress-4.9.4-ja.tar.gz
sudo tar dxf /tmp/wordpress-4.9.4-ja.tar.gz -C /opt
sudo ln -s /opt/wordpress /var/www/html
sudo chown -R apache:apache /opt/wordpress
sudo chkconfig http on
sudo service httpd start

```

## MySQLのインストール
```
# RDSインスタンスにログイン（ログインはRDSインスタンスのエントリポイントに記載）
mysql -u root -p -h wp-mysql.**********

mysql> CREATE USER 'wordpress-user'@'%' IDENTIFIED BY 'wordpress';
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE DATABASE wordpress;
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress-user"@"%";
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES
Query OK, 0 rows affected (0.01 sec)
```

#wordpress セットアップ
http://<EC2インスタンスのパブリックDNS>/wordpress/wp-admin/install.php

#ロードバランシングの設定
①AMIの作成
　EC2 → 　インスタンスを右クリック　→　DBインスタンスの起動

②別のAZでEC2を起動する
　EC2 → 　AMI　→　AMIを選択　→　作成
  AMI：Amazon Linux AMI

  ネットワーク：vpc-test
  サブネット：test-public-C
  自動割当パブリックIP：有効
  Nameタグ：WP-WebAPP
  セキュリティグループ：WP-Web-DMZ
　
③ELBの設定
　EC2 → 　ロードバランサー　→　ロードバランサーの作成
　ALBの選択
　![スクリーンショット 2018-08-12 15.24.43.png](https://qiita-image-store.s3.amazonaws.com/0/234299/f1cec004-a139-450c-46a9-8d51b463d965.png)

  リスナー
　  http：80
  AZ
    vpc：test-vpc
    サブネット：test-public-A, test-public-C
  タグ
    キー：Name
    値：WP-ELB
　ターゲットグループ
    名称：WpTargetNew

④WordPressの設定変更
 EC2 → 　ロードバランサーに表示されるELBのDNSをWordPressに設定する。
![スクリーンショット 2018-08-12 15.32.32.png](https://qiita-image-store.s3.amazonaws.com/0/234299/4bdfecae-7a34-98af-59fd-6a50cb04ee8b.png)

⑤スティッキーセッションの設定
冗長化構成したサーバー間でセッション情報を共有できるようにするための設定（スティッキーセッションの設定）を行う。
　EC2 → 　ターゲットグループ
　WpTargetを選択
　　登録解除の遅延：300秒
　　維持設定：有効
　　維持設定の時間：30分

⑥セキュリティグループの変更
　WordPressのEC2インスタンスはELB経由でのアクセスするように変更したため、ELBからのアクセスを許可するように設定を変更する。
 httpのソース：カスタム　　WP-ELBのグループIDを入力
  WP-Web-DMZ
 ![スクリーンショット 2018-08-12 15.47.35.png](https://qiita-image-store.s3.amazonaws.com/0/234299/9537935f-4a28-b80b-5d92-a314ac6af71a.png)