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