---
# System prepended metadata

title: WordPressの作成
tags: [AWS]

---

###### tags: `AWS`

# WordPressの作成
参考書籍: [AWSを始めよう](https://www.amazon.co.jp/AWS%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86-%EF%BD%9EAWS%E3%81%AB%E3%82%88%E3%82%8B%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%82%921%E3%81%8B%E3%82%8910%E3%81%BE%E3%81%A7%EF%BD%9E-%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-mochikoAsTech-ebook/dp/B07K1FP44W)

## 目的
- AWSの基本的な操作に慣れる。
- S3、Auto Scaling、ELBの実装を触ってみる。

## 構成
![](https://i.imgur.com/ZA3pfSV.png)

## 手順

### EC2インスタンスの作成
1. EC2インスタンスの作成

| 項目 | 設定値 |
| -------- | -------- | 
| AMI     | Amazon Linux     |
| Type     | t2.macro     |
| Security group     | SSH, port 22, source 0.0.0.0/0 | 

2. Elastic IPの割り当て
3. ミドルウェアインストール
```
# yum update -y
# yum install -y jwhois mysql
# yum install -y php72 php72-mbstring php72-mysqlnd

# chkconfig --add httpd
# chkconfig httpd on
```

4. OS基本設定
```bash
# 時刻設定
# vim /etc/sysconfig/clock
ZONE="Asia/Tokyo"

# ln -sf /usr/share/zoneinfo/Asia/Tokyo  /etc/localtime

# 言語設定
# vim /etc/sysconfig/i18n
LANG=ja_JP.UTF_8

> インスタンス復元時も設定を保持
# vim /etc/cloud/cloud.cfg
locale: ja_JP.UTF_8 # 末尾に追記

#historyの設定
# vim /etc/bashrc
HISTTIMEFORMAT='%F %T '
HISTFILESIZE=2000


# reboot
```

### Web Server setting
1. セキュリティグループにポート80番の穴をあける
Type: `HTTP`, port: `80`, source: `0.0.0.0/0`

2. Virtual hostの作成
```bash
# vim /etc/httpd/conf.d/start-aws-virtualhost.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/start-aws-documentroot"
    ServerName ec2-18-179-105-249.ap-northeast-1.compute.amazonaws.com

    ErrorLog "logs/start-aws-error.log"
    CustomLog "logs/start-aws-access.log" combined

    <Directory "/var/www/start-aws-documentroot">
        AllowOverride All
    </Directory>
</VirtualHost>

# mkdir /var/www/start-aws-documentroot
# apachectl configtest
Syntax OK


# vim /var/www/start-aws-documentroot/index.html
Welcome to test page!

# apachectl restart

# 確認
# curl -H "Host:www.ec2-18-179-105-249.ap-northeast-1.compute.amazonaws.com" http://localhost/index.html
```

### DB Serverの作成(RDS, MySQL)
1. パラメーターグループの作成
パラメーターグループファミリー:`mysql5.7`



| 項目 | 設定値 |
| -------- | -------- | 
| character_set_client     | utf8mb4     | 
| character_set_connection     | utf8mb4     | 
| character_set_database     | utf8mb4     | 
| character_set_results     | utf8mb4     | 
| character_set_server     | utf8mb4     | 
| collation_server     | utf8mb4_general_ci     | 
| collation_connection     | utf8mb4_general_ci     | 
| init_connect     | SET NAMES utf8mb4;     |

2. オプショングループの作成
エンジン: mysql (ver. 5.7)

3. インスタンスの作成
Mysql
1, 2で作成したパラメーターグループとオプショングループを適用

作成後、セキュリティグループの`Inbound roles`を編集
EC2のセキュリティグループから、port 3306向けの通信を許可

エンドポイント: `start-aws-db-instance.cw2vumygnjj6.ap-northeast-1.rds.amazonaws.com`

```bash
# mysql -h start-aws-db-instance.cw2vumygnjj6.ap-northeast-1.rds.amazonaws.com -uadmin -p

mysql> show databases;
+----------------------------+
| Database                   |
+----------------------------+
| information_schema         |
| innodb                     |
| mysql                      |
| performance_schema         |
| start_aws_wordpress_dbname |
| sys                        |
+----------------------------+
6 rows in set (0.00 sec)

```

### WordPressのsetting
1. WordPressのインストール
```
$ curl -O https://wordpress.org/latest.tar.gz
$ tar -xzf /home/ec2-user/latest.tar.gz
$ sudo mv /home/ec2-user/wordpress/* /var/www/start-aws-documentroot/

# テストページの削除
$ sudo rm  /var/www/start-aws-documentroot/index.html
```

2. Web上でのセッティング(DB接続など)
3. 管理画面にダイジェスト認証をかける
```bash
# ダイジェスト認証のパスワードファイルの作成
# htdigest -c /etc/httpd/conf/htdigest wp-admin-area start-aws-digest-user

# バーチャルホストにダイジェスト認証の設定を追加
# vim /etc/httpd/conf.d/start-aws-virtualhost.conf

<VirtualHost *:80>
    DocumentRoot "/var/www/start-aws-documentroot"
    ServerName ec2-18-179-105-249.ap-northeast-1.compute.amazonaws.com

    ErrorLog "logs/start-aws-error.log"
    CustomLog "logs/start-aws-access.log" combined

    <Directory "/var/www/start-aws-documentroot">
        AllowOverride All
    </Directory>

    <Directory "/var/www/start-aws-documentroot/wp-admin">
        AuthType Digest
        AuthName wp-admin-area
        AuthUserFile /etc/httpd/conf/htdigest
        Require valid-user
    </Directory>
</VirtualHost>

# apachectl configtest
Syntax OK
# apachectl restart
```

### 画像をS3に保存する
1. S3アップ用のIAMユーザーを作成する
権限: AmazonS3FullAccess
User: s3-upload-user
アクセスの種類: プログラムによるアクセス

2. WordPressにプラグインを導入
- Amazon Web Services
- WP Offload Media Lite for Amazon S3, DigitalOcean Spaces, and Google Cloud Storage

Bucket: start-aws-bucket

```bash
# 認証情報の書き込み
# vim /var/www/start-aws-documentroot/wp-config.php

define( 'DBI_AWS_ACCESS_KEY_ID', '********************' );
define( 'DBI_AWS_SECRET_ACCESS_KEY', '****************************************' );
```
## ELBの作成
1. ELBの作成

**Application Load Balancer**
elb-security-group
Type: `HTTP`, プロトコル: `TCP`,  ポート範囲: `80`, ソース: `0.0.0.0/0`


| 項目 | 設定値 |
| -------- | -------- |
|ターゲットグループ名| elb-target-gropu|
|ポート |80|
|ターゲットの種類 |instance|
|プロトコル| HTTP|
|ヘルスチェックプロトコル |HTTP|
|パス |/|
|ヘルスチェックポート |traffic port|
|正常のしきい値| 5|
|非正常のしきい値| 2|
|タイムアウト| 5|
|間隔 |30|
|成功コード| 200|

2. EC2へのHTTPアクセスはELB経由でのみ許可
EC2に紐づいているセキュリティグループのインバウンドルールを変更
ソース: `0.0.0.0/0` → `elb-security-group`

## Auto Scaling
**起動設定**
Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type - ami-02ddf94e5edc8e904
t2.micro

**Auto Scaling group**
| Column 1 | Column 2 |
| -------- | -------- |
|グループ名| start-aws-autoscaling-group|
|グループサイズ| 1|
|最小グループサイズ| 1|
|最大グループサイズ| 1|
|サブネット| subnet-bce7dee7|
|ロードバランサー| |
|ターゲットグループ| elb-target-gropu|
|ヘルスチェックのタイプ| ELB|
|ヘルスチェックの猶予期間| 300|
|詳細モニタリング| いいえ|
|インスタンスの保護| なし|



