【AWS 再入門】AWS 上にシンプルかつスケーラブルな WordPress 環境を構築してみよう (前編)

前回前々回の記事で EC2 と RDS によるミニマムなサーバー環境の構築手順をご紹介しました。今回はさらにもう一歩踏み込んで、ミニマムでありながらより実践的な VPC 環境の構築に挑戦したいと思います。

さらに今回は構築した環境に WordPress をインストールすることろまでやってみるとします。AWS では有志による WordPress 用の AMI (Amazon Macine Image) がいくつも配布されていますが、より理解を深めるためにも自分で環境構築からインストールまで全てやってみるとします。

構成図

ミニマムと言いましたが、一応将来のスケーリングも視野に入れた構成を目指します。

aws_diagram_vpc_for_wp

  • サブネットは3種類(レイヤー)作成する
    • Frontend (public)
    • Application (public)
    • Datastore (private)
  • 踏み台サーバー(EC2)は Frontend サブネット上に構築
  • アプリサーバー(EC2)は Application サブネット上に構築
  • DB サーバー(RDS)は Datastore サブネット上に構築
  • ELB を設置して将来のスケールアウトにも対応
    • Frontend サブネット上に構築
  • Multi-AZ 構成
  • VPC 内にあるインスタンス同士の通信は全て許可する
    • VPC Default セキュリティグループを全てのインスタンスに付与
  • 静的(メディア)コンテンツの保存先として S3 を設置する

基本的に前回の記事で紹介した構成がベースになっています。これにロードバランサーと S3 が追加されたものと考えて頂ければ良いでしょう。

作業のながれ

  1. Amazon VPC の構築
    1. VPC の作成
    2. Subnet の作成
    3. Internet Gateway の作成
    4. Route Table の確認 & 作成
    5. Security Group の作成
    6. DB Subnet Group の作成
  2. DB サーバー (RDS) の構築
  3. 踏み台サーバー (EC2) の構築
    1. Elastic IP の割り当て
  4. アプリケーション・サーバー (EC2) の構築
    1. Elastic IP の割り当て
  5. ロードバランサー (ELB) の設置
  6. Route 53 の設置
  7. S3 の設置
  8. WordPress のインストール
    1. メディアファイルの保存先を S3 に変更

こうしてみると結構なステップ数ですね。まぁ所詮は仮想環境だし、躓いたら全部消してやり直すなりもっと小さな構成にして仕切りなおせば良いのです。

1. Amazon VPC の構築

1-1. VPC の作成

基本的に前回の記事で解説した内容と同じです。今回は以下の内容で作成します。

Name tag CIDR block Tenancy
vpc-wp 10.0.0.0/16 Default

VPCを作成したら、以下の様なTagを付けておくとよいでしょう。VPC一覧から作成したものを選択し、Tagsタブを開いてEditボタンをクリックします。

vpc-edit_tag

Key Value
Network Public

1-2. Subnet の作成

これも作成の手順は前回で解説した内容と基本的には同じです。今回は、踏み台とロードバランサー用(Frontend)、アプリサーバー(Application)、DB サーバー(Datasore) をそれぞれを2つずつ作成します (Multi-AZ 構成のため)。

Name tag VPC Availability Zone CIIDR block
FrontendSubnet1 vpc-wp ap-northeast-1a 10.0.0.0/24
FrontendSubnet2 vpc-wp ap-northeast-1c 10.0.1.0/24
ApplicationSubnet1 vpc-wp ap-northeast-1a 10.0.100.0/24
ApplicationSubnet2 vpc-wp ap-northeast-1c 10.0.101.0/24
DatastoreSubnet1 vpc-wp ap-northeast-1a 10.0.200.0/24
DatastoreSubnet2 vpc-wp ap-northeast-1c 10.0.201.0/24

こちらにもそれぞれにTagを追加しておくと良いでしょう。

Subnet Key Value
FrontendSubnet1 & FrontendSubnet2 Network Public
ApplicationSubnet1 & ApplicationSubnet2 Network Public
DatastoreSubnet1 & DatastoreSubnet2 Network Private

1-3. Internet Gateway の作成

基本的に前回の記事で解説した内容と同じですが、これにも識別しやすいように作成後にTagを追加しておくと良いでしょう。

Key Value
Network Public

Internet Gateway を VPC と紐付けます。Attach to VPCボタンをクリックし、先ほど作成した VPC を選択します。

1-4. Route Table の確認 & 設定

サブネットを作成した時点で自動生成した Route Table がデフォルトで割り当てられています。この Route Table は private subnet 用として使い、public subnet 用に新規で作成します。

Route Table の作成

以下の内容で作成します。作成方法は前回の記事で解説した内容と同じです。

Name tag VPC
PublicRouteTable 作成したVPC

作成した Route Table の Destination に 0.0.0.0/0を、先ほど作成した Internet Gateway に向けるように設定します。

  1. 一覧から今作成した Route Table を選択し、画面下の Routes というタブを開いてEditという青いボタンをクリックする
  2. Destination に0.0.0.0/0と入力する
  3. Target に先ほど作成した InternetGateway を選択する
  4. Saveボタンをクリック

vpc-edit_routetable

最後に今作成した Route Table を Public subnet に設定します。今回の Public subnet は FrontendSubnet と ApplicationSubnet です。左メニューからSubnetsを選択し、それぞれに対して以下の操作をします。

  1. Route Tableタブを開いてEditという青いボタンをクリック
  2. Change to:に今しがた作成した Route Table を選択して一覧に追加されたのを確認したら、Saveボタンをクリック

1-5. Security Group の作成

セキュリティグループは用途にあわせて複数作成します。今回は4種類作成します。

ロードバランサー用
Name tag Group name Description VPC
PublicWebSecurityGroup PublicWebSecurityGroup Public Security Group with HTTP access on port 80 from the internet vpc-wp
Inbound Rules
Type Protocol Port Range Source
HTTP(80) TCP(6) 80 0.0.0.0/0
HTTPS(443) TCP(6) 443 0.0.0.0/0
踏み台サーバー用
Name tag Group name Description VPC
SSHSecurityGroup SSHSecurityGroup Enable SSH access via port 22 vpc-wp
Inbound Rules
Type Protocol Port Range Source
SSH(22) TCP(6) 22 0.0.0.0/0
アプリケーション・サーバー用
Name tag Group name Description VPC
AppliccationSecurityGroup AppliccationSecurityGroup Marker security group for Application server vpc-wp
Inbound Rules
Type Protocol Port Range Source
設定不要
DBサーバー用
Name tag Group name Description VPC
MySQLSecurityGroup MySQLSecurityGroup Marker security group for MySQL server vpc-wp
Inbound Rules
Type Protocol Port Range Source
設定不要

1-6. DB Subnet Group の作成

基本的に前回の記事で解説した内容と同じです。今回は以下の内容で作成します。

Name Description VPC ID
WPDBSubnetGroup DB subnets for RDS 作成したVPC

これに DB サーバー用のサブネット (x2) を追加してCreateボタンをクリックします。

Availability Zone Subnet ID CIIDR block
ap-northeast-1a DatastoreSubnet1のID 10.0.200.0/24
ap-northeast-1c DatastoreSubnet2のID 10.0.201.0/24

以上でVPC環境の構築は完了です。

2 ~ 4. 各種インスタンスの作成

DBサーバー / 踏み台サーバー / アプリサーバーをそれぞれ作成するわけですが、前回の記事にて紹介した内容と全く同じなので割愛します。VPC Default セキュリティグループを全インスタンスに付与するのをお忘れなく。

5. ロードバランサー (ELB) の設置

いわゆる負荷分散機能です。ELB を設置しておくことでトラフィック数が多くなってきても上手い具合に複数のインスタンスに流れを分散してくれます。他にも Amazon からの通達でインスタンス再起動することになっても、一台ずつ再起動をすることでサービスの停止を極力抑えるメリットがあったり、仮にインスタンス一台で充分捌ける程度のトラフィック数出会ったとしても、ELB を設置しておくことで将来のスケールアウトにも柔軟に対応が出来るというメリットがあります。 ELB は余程の理由がない限り設置しておくのが良いかと思います。

  1. EC2 Management Console を開く
  2. 左メニューからLoad Balancersを選択する
  3. Create Load Balancerという青いボタンをクリック
  4. 適当な Load Balancer Name を入力し、Create LB Insideに今回作成した VPC を選択
  5. Listener Configurationには HTTPが最初から設定されているので、そのままで OK
  6. Select Subnetsにある一覧からFrontendSubnet1,FrontendSubnet2を選択

create_lb

セキュリティグループを選択します。defaultPublicWebSecurityGroupを選択します。

assign_sg

Ping Path/readme.htmlに書き換えます。それ以外の項目は、すべてそのままで OK です。

health_check

ELB に紐付ける EC2 インスタンスを選択します。ApplicationIntanceを選択します。

add_ec2

最後にTagを設定したらReview and Createボタンをクリックして確認画面に進み、問題なければCreateボタンをクリックして ELB を起動させます。少し待った後、ELB の Status が0 of 1 instances in serviceとなっていれば正常に動作しています。

後半に続きます。