naoya0408 / menta

0 stars 0 forks source link

AWS (EC2+RDS)でWordPressを構築する #31

Closed naoya0408 closed 4 years ago

naoya0408 commented 5 years ago

AWS (EC2+RDS)でWordPressを構築する

naoya0408 commented 5 years ago

VPCの構築

VPCの作成

VPCとは?

Virtual Private Cloud (VPC) は、AWS アカウント専用の仮想ネットワークです。VPC は、AWS クラウドの他の仮想ネットワークから論理的に切り離されており、AWS のリソース(例えば Amazon EC2 インスタンス)を VPC 内に起動できます。https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Subnets.html

VPCのマネジメントコンソールでVPCの作成をする

スクリーンショット 0001-08-31 23 23 32

10.0.0.0/16のアドレス空間を扱うVPCを作成する。

subnetの作成

以下の2つのサブネットを作成する

項目
Name public-subnet-1a
VPC 上記で作成したVPC
アベイラビリティゾーン ap-northeast-1a
IPv4 CIDR ブロック 10.0.0.0/24
項目
Name private-subnet-1a
VPC 上記で作成したVPC
アベイラビリティゾーン ap-northeast-1a
IPv4 CIDR ブロック 10.0.1.0/24

インターネットゲートウェイの追加

名前タグに「wordpress-igw」と入力し作成 「アクション」から「VPCにアタッチ」を選択し先程作成したVPCにアタッチする

ルートテーブルの編集

このままではインターネットに繋がることができない。 インターネット(0.0.0.0/0)へのルーティングを、IGWに向けるように設定する

スクリーンショット 0001-09-01 21 07 57

次にパブリックサブネットをルートテーブルに関連付ける

スクリーンショット 0001-09-01 22 02 24
naoya0408 commented 5 years ago

EC2を設置する

EC2のマネジメントコンソール上で「インスタンスの作成」から作成していく

Amazon マシンイメージ (AMI)の選択

項目
Amazon マシンイメージ (AMI) Amazon Linux 2 AMI (HVM), SSD Volume Type
- ami-0ff21806645c5e492


インスタンスタイプの選択

項目
インスタンスタイプ t2.micro


インスタンスの詳細の設定

スクリーンショット 0001-09-07 17 15 14

以下の設定を変更する

ストレージの追加

今回は設定を変更せずに汎用SSD(gp2)を使用する

タグの追加

キー
Name web-server-1a


セキュリティグループの設定

以下の設定を追加する

スクリーンショット 0001-09-07 21 00 03

キーペアの作成

キーペアの名前を入力しダウンロードする

スクリーンショット 0001-09-07 23 09 52


設定を確認しインスタンスを作成する

スクリーンショット 0001-09-07 23 20 25

インスタンスの作成が始まり、少し立つとステータスがrunningに変わり、 起動したことがわかる

naoya0408 commented 5 years ago

インスタンスにSSH接続して環境構築


秘密鍵のパーミッションの変更

そのままだとインスタンスにssh接続ができないので、 パーミッションを変更しておく

#保存するフォルダを任意の場所へ移動させる
% sudo mv Downloads/aws-ssh-key.pem ~/.ssh/

#パーミッションを600へ変更
% sudo chmod 600 ~/.ssh/aws-ssh-key.pem


SSHでインスタンスに接続する

秘密鍵とIPアドレスを指定しログインする

% ssh -i ~/.ssh/aws-ssh-key.pem ec2-user@52.194.4.27
The authenticity of host '52.194.4.27 (52.194.4.27)' can't be established.
ECDSA key fingerprint is SHA256:40jADxHujH6tpljEIaCgFTQ+JmCRSAcSGEOb/FfIv6Y.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '52.194.4.27' (ECDSA) to the list of known hosts.
Last login: Sun Sep  8 11:35:51 2019 from ftth-175.189.dws.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/


パッケージをアップデートする

$ sudo yum -y update

nginxとphpをインストールする

amazon-linux-extrasを利用しインストールしていく 【参考】 https://dev.classmethod.jp/cloud/aws/how-to-work-with-amazon-linux2-amazon-linux-extras/

$ amazon-linux-extras
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1  =1.5.16 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available    [ =8.0 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19  =7.2.21 ]

nginx1.12とphp7.2が利用できるのでインストールする

$ php -v PHP 7.2.21 (cli) (built: Aug 19 2019 22:57:44) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

$ php-fpm -v PHP 7.2.21 (fpm-fcgi) (built: Aug 19 2019 23:01:23) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

<br>

* nginxの起動

$ sudo systemctl start nginx

* nginxの自動起動設定

$ sudo systemctl enable nginx

* PHP-FPMの起動

$ sudo systemctl start php-fpm

* PHP-FPMの自動起動設定

$ sudo systemctl enable php-fpm

<br>

* nginxの設定を変更する

/etc/nginx/nginx.conf

server { listen 80 default_server; listen [::]:80 default_server; servername ; root /var/www/wordpress;

    try_files $uri $uri/ /index.php?q=$uri&$args;

    location ~* /wp-config.php {
        deny all;
    }

    location ~ \.php$ {
        root           /var/www/wordpress;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name;
        include        fastcgi_params;
    }
<br>

* php-fpmの設定を変更する

/etc/php-fpm.d/www.conf

naoya0408 commented 5 years ago

RDSでデータベースサーバーを設置する ①

サブネットを追加する

  1. ELBを使って負荷分散をする
  2. データベースをマルチAZ構成にする

以上のことを実現したいので、他のアベイラビリティゾーンにも パブリックサブネットとプライベートサブネットを設置する

項目
Name public-subnet-1c
VPC 作成したVPC
アベイラビリティゾーン ap-northeast-1c
IPv4 CIDR ブロック 10.0.2.0/24
項目
Name private-subnet-1c
VPC 作成したVPC
アベイラビリティゾーン ap-northeast-1c
IPv4 CIDR ブロック 10.0.3.0/24


セキュリティグループの作成

WEBサーバーからDBサーバーへのアクセスを許可するセキュリティーグループを作成する

スクリーンショット 0001-09-15 23 04 31

ソースにWEBサーバーのセキュリティーグループを指定することで そのセキュリティーグループ内のインスタンスからアクセスすることが可能になる

サブネットグループを作成する

RDSが起動するサブネットを複数指定する RDSをマルチAZ化するために必要な設定となる

スクリーンショット 0001-09-15 23 57 09

サブネットに2つのアベイラビリティゾーンに作成した2つのプライベートサブネットを追加する

naoya0408 commented 5 years ago

RDSでデータベースサーバーを設置する ②

データベースの作成

RDSのコンソールから「データベースの作成」を選択し設定していく 設定を変更した箇所は以下の通り


項目
エンジンのオプション MySQL
バージョン MySQL 8.0.16(最新バージョン)
スクリーンショット 0001-09-16 17 54 34


スクリーンショット 0001-09-16 18 28 09


項目
DB インスタンス識別子 my-db-instance
マスターユーザー名 root
マスターパスワード 任意のパスワード
パスワードを確認 パスワードを再入力
スクリーンショット 0001-09-16 18 30 02


スクリーンショット 0001-09-16 18 30 14


項目
ストレージタイプ 汎用(SSD)
ストレージの自動スケーリング 無効
スクリーンショット 0001-09-16 18 30 26


スクリーンショット 0001-09-16 18 30 36


項目
VPC 作成したVPC
サブネットグループ 上記で作成したサブネットグループを選択
パブリックアクセス なし
セキュリティグループ 上記で作成したセキュリティグループ(defaultは外しておく)
データベース名 wordpress
自動バックアップの有効化 有効
スクリーンショット 0001-09-16 18 32 08 スクリーンショット 0001-09-16 18 32 25 スクリーンショット 0001-09-16 18 32 43 スクリーンショット 0001-09-16 18 33 03 スクリーンショット 0001-09-16 18 33 19
naoya0408 commented 5 years ago

WEBサーバーからRDSへ接続する


mysqlコマンドが使えるようにMySQLをインストールする

$ sudo yum -y install mysql


mysqlコマンドでデータベースに接続する

RDSのマネジメントコンソールの作成したデータベースのエンドポイントをコピーしておく

$ mysql -h "ここにRDSデータベースのエンドポイントを貼り付ける" -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 74
Server version: 8.0.16 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

データベースに接続することができた


wordpress用のデータベースが作成されているか確認する

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+
4 rows in set (0.00 sec)

作成されていることが確認できる

naoya0408 commented 5 years ago

WordPressをインストールする


設定したパブリックIPへアクセスする 指示にしたがってすすめていく

スクリーンショット 0001-09-16 22 07 55

RDSで作成したデータベース名、ユーザー名、パスワードを入力 データベースのホスト名にはデータベースのエンドポイントを貼り付ける

インストール完了後、サイトの必要情報を入力する

スクリーンショット 0001-09-16 22 12 08

EC2とRDSを利用してWordPressの構築をすることができた

naoya0408 commented 5 years ago

ELBでアクセスを分散させWEBレーヤーを冗長化させる①


AMIの作成

EC2のマネジメントコンソール→作成したインスタンスにチェックを入れ、「アクション」→「イメージ」→「イメージの作成」を選択

スクリーンショット 0001-09-16 22 38 52

必要な箇所を入力しイメージを作成する

スクリーンショット 0001-09-17 22 29 21

AMIが作成された


AMIからインスタンスを起動する

EC2のマネジメントコンソール→AMI→作成されたAMIにチェックを入れ「起動」を選択する EC2の設定画面が開くので設定をしていく

項目
サブネット ap-northeast-1c
Name web-server-1c

先に作ったインスタンスと上記の点を変え作成する

スクリーンショット 0001-09-17 22 37 40


アクセスが分散されているかブラウザで確認ができるよう、以下のようにファイルの変更をする

$ sudo vim /var/www/wordpress/index.php

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

echo '<p>1aのインスタンスにアクセスしています</p>';   #1aのインスタンスにこの行を追加
echo '<p>1cのインスタンスにアクセスしています</p>';   #1aのインスタンスにこの行を追加

ブラウザでアクセスする


naoya0408 commented 5 years ago

ELBでアクセスを分散させWEBレーヤーを冗長化させる②

ロードバランサーの作成

EC2のマネジメントコンソールから「ロードバランサー」を選択→「ロードバランサーの作成」をクリックして作成していく

項目
名前 aws-wordpress-alb

アベイラビリティーゾーンでap-northeast-1aとap-northeast-1cのWordPressを配置したサブネットをリストから選択する

スクリーンショット 0001-09-17 23 08 09


セキュリティーグループの設定

ELB用のセキュリティーグループを新規作成する プロトコルはHTTPの80番ポートを指定する

スクリーンショット 0001-09-17 23 13 21


ターゲットグループの設定

新規のターゲットグループを作成する 今回はテストなのですぐに結果が得られるよう、正常のしきい値を2にし、ヘルスチェックの間隔を10秒に設定する

スクリーンショット 0001-09-17 23 10 40


ターゲットの登録

2つのインスタンスをチェックし登録済みに追加する

スクリーンショット 0001-09-17 23 11 50

ロードバランサーのDSN名にアクセスし確認

上記設定にてロードバランサーを作成後、ステータスが「active」になったらロードバランサーのdescriptionからDNS名のアドレスをコピーしブラウザでアクセスする

スクリーンショット 0001-09-26 21 00 22 スクリーンショット 0001-09-26 21 00 30

リロードをするごとに上記画面が交互に表示される ロードバランサーがアクセスを分散していることが確認できた