【AWS 再入門】AWS 上にシンプルかつスケーラブルな WordPress 環境を構築してみよう (前編)
wakamsha
前回と前々回の記事で EC2 と RDS によるミニマムなサーバー環境の構築手順をご紹介しました。今回はさらにもう一歩踏み込んで、ミニマムでありながらより実践的な VPC 環境の構築に挑戦したいと思います。
さらに今回は構築した環境に WordPress をインストールすることろまでやってみるとします。AWS では有志による WordPress 用の AMI (Amazon Macine Image) がいくつも配布されていますが、より理解を深めるためにも自分で環境構築からインストールまで全てやってみるとします。
構成図
ミニマムと言いましたが、一応将来のスケーリングも視野に入れた構成を目指します。
- サブネットは3種類(レイヤー)作成する
- Frontend (public)
- Application (public)
- Datastore (private)
- 踏み台サーバー(EC2)は Frontend サブネット上に構築
- アプリサーバー(EC2)は Application サブネット上に構築
- DB サーバー(RDS)は Datastore サブネット上に構築
- ELB を設置して将来のスケールアウトにも対応
- Frontend サブネット上に構築
- Multi-AZ 構成
- VPC 内にあるインスタンス同士の通信は全て許可する
- VPC Default セキュリティグループを全てのインスタンスに付与
- 静的(メディア)コンテンツの保存先として S3 を設置する
基本的に前回の記事で紹介した構成がベースになっています。これにロードバランサーと S3 が追加されたものと考えて頂ければ良いでしょう。
作業のながれ
- Amazon VPC の構築
- VPC の作成
- Subnet の作成
- Internet Gateway の作成
- Route Table の確認 & 作成
- Security Group の作成
- DB Subnet Group の作成
- DB サーバー (RDS) の構築
- 踏み台サーバー (EC2) の構築
- Elastic IP の割り当て
- アプリケーション・サーバー (EC2) の構築
- Elastic IP の割り当て
- ロードバランサー (ELB) の設置
- Route 53 の設置
- S3 の設置
- WordPress のインストール
- メディアファイルの保存先を 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ボタンをクリックします。
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 に向けるように設定します。
- 一覧から今作成した Route Table を選択し、画面下の Routes というタブを開いてEditという青いボタンをクリックする
- Destination に
0.0.0.0/0
と入力する - Target に先ほど作成した InternetGateway を選択する
- Saveボタンをクリック
最後に今作成した Route Table を Public subnet に設定します。今回の Public subnet は FrontendSubnet と ApplicationSubnet です。左メニューからSubnetsを選択し、それぞれに対して以下の操作をします。
- Route Tableタブを開いてEditという青いボタンをクリック
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 |
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 |
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 |
Type | Protocol | Port Range | Source |
---|---|---|---|
設定不要 |
DBサーバー用
Name tag | Group name | Description | VPC |
---|---|---|---|
MySQLSecurityGroup | MySQLSecurityGroup | Marker security group for MySQL server | vpc-wp |
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 は余程の理由がない限り設置しておくのが良いかと思います。
- EC2 Management Console を開く
- 左メニューからLoad Balancersを選択する
- Create Load Balancerという青いボタンをクリック
- 適当な
Load Balancer Name
を入力し、Create LB Inside
に今回作成した VPC を選択 Listener Configuration
にはHTTP
が最初から設定されているので、そのままで OKSelect Subnets
にある一覧からFrontendSubnet1
,FrontendSubnet2
を選択
セキュリティグループを選択します。default
、PublicWebSecurityGroup
を選択します。
Ping Path
を/readme.html
に書き換えます。それ以外の項目は、すべてそのままで OK です。
ELB に紐付ける EC2 インスタンスを選択します。ApplicationIntance
を選択します。
最後にTag
を設定したらReview and Create
ボタンをクリックして確認画面に進み、問題なければCreate
ボタンをクリックして ELB を起動させます。少し待った後、ELB の Status が0 of 1 instances in service
となっていれば正常に動作しています。
後半に続きます。