ふるてつのぶろぐ

福岡在住のエンジニアです。

写真提供:福岡市

今夜は社内AWSもくもく会2 - WordPressその2

今日すること

こんにちはふるてつです。

今回のテーマは前回のテーマ「WordPressを使ったブログサイトの構築」の続きです。
前回作成したWordPressを入れたEC2を、まず複製して2台構成にし、そのあとELBを追加、HTTPS通信にするという感じになります。

AMIの作成

前回WordPressを入れたEC2を作成しましたが、複製して2台目を追加します。
まずはAMIを作成します。
EC2のメニューからインスタンスを表示して右クリック→「イメージ」→「イメージの作成」です。
f:id:tetsufuru:20190809064201p:plain

「イメージ名」、「イメージの説明」のみ入力して他はデフォルトのままで「イメージの作成」をクリックします。
f:id:tetsufuru:20190809064804p:plain

f:id:tetsufuru:20190809065604p:plain

AMIを作成するのはわたしこれまでに数回やっていますね、だいぶ慣れてきました。

EC2の作成

次はAMIからEC2インスタンスを作成します。 下記のように先ほど作ったAMIを選択して「起動」ボタンをクリックします。 f:id:tetsufuru:20190809070147p:plain

まずインスタンスの詳細を設定します。
「ネットワーク」は前回作成していたvpcvpc-wordPress)を選択します。
「サブネット」はWP-PublicSubnetCを選択します。
(AZをまたぐAとCのサブネットがあり、1台目のEC2がAにいます)
f:id:tetsufuru:20190810144847p:plain

次はストレージですがデフォルトのままです。
f:id:tetsufuru:20190810145536p:plain

タグは「Name」だけ入力します。
f:id:tetsufuru:20190810145707p:plain

セキュリティグループは既存から選びます。
これも前回Web用に作ったWP-Web-DMZを選択します。
f:id:tetsufuru:20190810150234p:plain

インスタンスを確認します。
f:id:tetsufuru:20190810150558p:plain

下記のキーペアですが1台目のものを使うようにしました。 結局やり終えたら全部消しますので。
インスタンスの作成」ボタンをクリックでインスタンスの作成が完了します。
f:id:tetsufuru:20190810150822p:plain

EC2インスタンスは1台だけだと停止しておけば料金は気にしなくてよいのですが、2台目を作ると動かしっぱなしはもちろん費用がかかりますが、 停止していてもdisk代がかかってくるようになります、そのため作業は2~3時間で終わるようにしたいですね。
さっと最後まで試して作ったものをすぐに全部削除するのが安心です。

ELB追加

次にELBを追加します。
EC2のメニューの下の方にロードバランサーのメニューがあります。
f:id:tetsufuru:20190810151654p:plain

ロードバランサーの種類の選択画面が出てきます。
この画面もよく出てきます。
この作業も慣れてきました。
一番左のHTTP/HTTPSを選択します。
ECサイトの大手などだと真ん中のTLSを使うんでしょうね。
f:id:tetsufuru:20190810151941p:plain

基本の設定。プロトコルはまずはHTTPにします。
f:id:tetsufuru:20190810152330p:plain

アベイラビリティゾーン(AZ)を追加します。
WP-PublicSubnet-AとWP-PublicSubnet-Cを割り当てます。
f:id:tetsufuru:20190810152909p:plain

f:id:tetsufuru:20190810153138p:plain

セキュリティグループの設定は新しいものを作成します。
f:id:tetsufuru:20190810153257p:plain

ルーティングの設定です。
ターゲットグループをインスタンスにします。
f:id:tetsufuru:20190810154449p:plain

次はターゲットの登録ですが、画面下のようにこれまでに作成したEC2インスタンス2台を登録します。
f:id:tetsufuru:20190810154937p:plain

これで下のように作成完了となります。
f:id:tetsufuru:20190810155136p:plain

WordPress側の設定になりますが、上記で作成したELBのDNS名をコピーして、 WordPress管理画面の「メニュー」→「設定」で「WordPressアドレス」と「サイトアドレス」を書き換えます (画面キャプチャーを忘れました。分かりにくくすみません)
現状はEC2の1台目のアドレスになっているはずなので、書き換え後は下記例のようなアドレスになります。
http://wp-eb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com/wordpress

この設定でWordPressが変わりなく使用できるのを確認します。

スティッキーセッションの設定追加など

HTTP通信の設定を行う前にスティッキーセッションの設定を行います。
メニューから「ターゲットグループ」を選びます。
「説明」タブの下の方に「属性の編集」ボタンがあるのでクリックします。
f:id:tetsufuru:20190810170513p:plain スティッキーセッションの設定は下記のようにします。
「登録解除の遅延」:300秒
「維持設定」:有効化
「維持設定の期間」:30分
この設定をしておくと同じセッションのアクセスは、同一サーバーに届くようになります。
本来ならセッションはRedisやDBに持たせないとなりませんが、この本では簡略化の為このような設定でとどまっています。
f:id:tetsufuru:20190810170709p:plain

次にEC2が使うセキュリティグループの設定を変更して、HTTPのインバウンドはELBを通してだけ許すようにします。 セキュリティグループの画面から、WP-Web-DMZを選択します。
f:id:tetsufuru:20190810172943p:plain

下記のようにHTTPは「ソース」をカスタムにして、その右にはWP-ELBグループのグループIDを入力します。
f:id:tetsufuru:20190810174853p:plain

HTTPS通信の追加

HTTPS通信をするためにはOpen SSLを利用して自己証明書を発行します。
ではまず、ECにTeraTermでログインします。 ログインするEC2は1台目でも2台目でもどちらでも構いません、ディレクトリも任意です。

まず下記のコマンドです、これが秘密鍵になります。
openssl genrsa -out ./server.key 2048
次は下記のコマンドです。
openssl req -new -key ./server.key -out ./server.csr
対話形式で色々聞かれます、「Common Name」にはELBのDNSを入力します。

openssl req -new -key ./server.key -out ./server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Fukuoka-shi
Locality Name (eg, city) [Default City]:hakata-ku
Organization Name (eg, company) [Default Company Ltd]:hakata
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:wp-eb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

最後は下記のコマンドです。
こちらでパブリック証明書が作られます。
openssl x509 -in server.csr -days 365 -req -signkey server.key -out server.crt
これまでのコマンドで、server.crtaerver.csrserver.keyの3ファイルができます。

次はAWSに戻ってロードバランサー画面を表示します。
ELBを選択して「リスナー」タブから「リスナーの追加」ボタンをクリックします。
f:id:tetsufuru:20190810183210p:plain

プロトコルHTTPSを選択します。
「デフォルトのSSL証明書」欄は"インポート"を選択、「インポート先」欄には"ACM"を設定します。
f:id:tetsufuru:20190810183831p:plain

「プライベートキー」欄には先ほど作成したファイルの一つ、server.keyの内容を貼り付けます。
「証明書本文」欄にはserver.crtの内容を貼り付け「保存」します。
f:id:tetsufuru:20190810184318p:plain

最後にELBのセキュリティグループを編集してHTTPSを追加します。
f:id:tetsufuru:20190810202757p:plain

下記のような設定になります。
f:id:tetsufuru:20190810195212p:plain

最後にWordPressSSLプラグインを追加します。
WordPressの管理画面でメニューの「プラグイン」をクリックして、プラグインの追加画面を表示します。
そして「キーワード」欄に"SSL"と入力して検索します。
下記に表示されている"SSL Insecure Content Fixer"をインストールします。
f:id:tetsufuru:20190810195509p:plain

f:id:tetsufuru:20190810195853p:plain 上記のようにHTTPS通信でWorePress画面が表示されるようになったら完了です。
自身で作成した証明書(オレオレ証明書)なので警告はでます、これは仕方ありません。

感想

今日は前回の続きを行いました。
最後まで完了したので、これでEC2が2台とELBを使用した冗長化構成のサイトができました。
あとはEC2のインスタンスを1台終了してみるなどして少し遊びました。
今週も少し長くなりました。
今日から盆休みなのでなにをしようか考え中です。

それではまた