【ハンズオン2】冗長性のあるブログサービスを構築する（冗長構成）

##今回の記事について

この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com

##前回の続き
前回の記事の続きになります。
前回作成した環境に構築していきますので、まずはこちらをご覧ください。

https://qiita.com/wanidrums/private/f7f4a497e664ead1dcbe

##今回やる事
・もう片方のAZへAMIを使ってEC２を作成
・ELBの設置
・片方のEC２を停止してもwordpressサイトが表示されるか、ELBがちゃんと機能するか確認
・RDSのフェイルオーバーができるか確認

##環境
macOS Big Sur バージョン１１.２.２

##構成図

![hands-on2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1650745/edb0438a-eb2b-3f6b-7e51-977dc498d3c8.png)












##もう片方のAZへAMIを使ってEC２を作成

まずAMIを作成する前に、ELBを設置してそれぞれのEC２サーバーを切り替えた時の表示を区別したいので、Web Server1, Web Server2という文字をそれぞれのEC２へ書き込む。

なので手順としては
１、既存のEC２へWeb Server 1という文字を書き込み
２、EC２のAMIを作成し、別のパブリックサブネットにEC２を作成する
３、手順１と同じように今度はWeb Server 2という文字を書き込む

####１、既存のEC２へWeb Server 1という文字を書き込み
EC2へログイン

`cd /var/www/html`

`sudo vi index.php`

`echo '<p>Web Server 1</p>';`
（下記画像のように記入）

![スクリーンショット 2021-07-23 19.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1650745/d352ae35-90a0-cee0-bc12-b8daabe417a0.png)


####２、EC２のAMIを作成し、別のパブリックサブネットにEC２を作成する

・一度EC2を停止

・アクション⇨イメージとテンプレート⇨イメージを作成

・イメージ名を入力し、イメージを作成

・左ペインのAMIで状態がpendingからavailableになったら、AMIを使ってEC2インスタンスを起動

・もう一つのパブリックサブネットに作成する

####３、手順１と同じように今度はWeb Server 2という文字を書き込む

AMIで作成したEC 2にログインし、/var/www/html/index.php ファイルを開く

`echo '<p>Web Server 2</p>';`
に変更。

##ELBの設置

ALBの作成

**手順１　ロードバランサーの設定**
・基本的な設定
名前：任意の名前
スキーム：インターネット向け
IPアドレスタイプ：Ipv4

・リスナー設定
HTTP ８０

・アベイラビリティーゾーン
VPC、各ゾーンのパブリックサブネットを選択

**手順２　セキュリティ設定の構成**
リスナーでHTTPSの設定をしていなければ、注意画面が出るが、あとで設定できるのでここはひとまず次へ進む

**手順３　セキュリティグループの設定**
新規作成でLB用のSGを作りましょう。
設定はデフォルトのまま、とりあえずポート８０をフルオープンでOKです。

**手順４　ルーティングの設定**

・ターゲットグループ
ターゲットグループの名前設定：任意の名前　
ターゲットの種類：インスタンス
プロトコル：HTTP
ポート：８０
プロトコルバージョン：HTTP1

・ヘルスチェック
プロトコル：HTTP
パス：指定したファイルを作成する必要がある
例：/readme.html で設定した場合
インスタンス内の/var/www/html配下にreadme.htmlファイルを作成する必要がある（何か書き込んだファイル）

・ヘルスチェックの詳細設定
デフォルトもしくは任意の設定

**手順５　ターゲットの登録**

設定したパブリックサブネットのそれぞれのインスタンスを登録済みに追加する

**手順６　確認**

設定した項目を確認し、問題なければ作成

ターゲットグループの欄に移動し、作成したターゲットグループを選択
Targetsの部分のHealth StatusがHealthyになってればヘルスチェック完了してる。
＊うまくいってなければ、パスを確認してみてください

##片方のEC２を停止してもwordpressサイトが表示されるか、ELBがちゃんと機能するか確認

####・RDSの中に設定されているサイトアドレスをELBのDNS名に書き換える

**手順１　どちらかのウェブサーバーにログインし、RDSに接続する**

`mysql -h RDSのエンドポイント -u wordpress -p`
⇨パスワード入力

**手順２　ワードプレスのテーブルを選択**

`USE wordpress`

**手順３　現在の設定を確認**

`SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');`

**手順４ テーブルのアドレスを変更**

`UPDATE wp_options SET option_value = 'http://xx.xx.xx.xx' WHERE option_name IN ('siteurl', 'home');`
＊xx.xx.xx.xxの部分にELBのDNS名を入力

再び手順３で書き変わっているか確認する

####・DNS名をブラウザに打ち込みブログが表示されるか確認
何度か更新ボタンを押して、WebServer1, WebServer2がランダムに表示されればELBが機能している証拠

**補足1：**
EC２のセキュリティグループの設定でHTTPフルオープンの代わりに、ELBのセキュリティグループからの通信のみを許可する設定にする

![スクリーンショット 2021-07-24 20.08.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1650745/45abae6c-3349-74bc-5475-c98eae1fd0f5.png)

変わらず接続できればOK

**補足2**
試しにEC２を一台停止して、変わらずウェブサイトが表示されるか確認。
片方のインスタンスに障害が起きても、もう片方のインスタンスが接続されることが確認できればOK

##RDSのフェイルオーバーができるか確認

**RDSの設定を変更**
マルチAZ配置欄で「スタンバイインスタンスを作成する」にチェック

次へ進む

今回はデモなので、今すぐ変更にチェックをし、変更ボタンを押す。

**RDSを再起動してみる**
アクション⇨再起動⇨「フェイルオーバーで再起動しますか？」にチェックを入れ再起動

**フェイルオーバーされたか確認**
RDSのログとイベントで「Multi-AZ instance failover completed」になってればフェイルオーバー出来たことが確認できる

##次回の記事

https://qiita.com/wanidrums/items/48dab3ba4a029e5ea7af