###### 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の実装を触ってみる。
## 構成

## 手順
### 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|
|詳細モニタリング| いいえ|
|インスタンスの保護| なし|