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

この記事を書いている私について

インフラ系PMO歴半年でAWSクラウドプラクティショナーを取ったばかりの私が
AWS CloudTechという動画学習サービスに参加し、AWSエンジニアを目指すための備忘録です:fire:
AWSを使った運用から開発まで極めるため日々精進:fire:


この記事を書こうと思った経緯
-

 前回の記事[AWSを使ってシングル構成のブログサービスを構築しました](https://qiita.com/zetzetn/items/197c2ddd2839d499faf7 "AWSを使ってシングル構成のブログサービスを構築しました")の続きです。


本記事の目標
-
前回の構成だと、EC2に障害が発生した場合にサービス全体が停止してしまうリスクがあります。
その為、ブログサービスに冗長化を持たせるためAZ 1cにEC2とRDSを新たに実装します。
クライアントはどちらのEC2からでも最新のブログ投稿記事を確認することが出来るようになります。



今回の構成図
-
![ブログサービス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465906/9c490d5a-0f5f-22ec-379f-78693f0dcfee.png)

※構成図の作成に[cloudcraft](https://app.cloudcraft.co/ "cloudcraft")を利用しています。
　



構築の流れ
-

以下の流れで構築を進めます。

・EC2インスタンスを開始
・RDSを復元
・ブラウザからブログが閲覧できることを確認
・トップページを編集(WebServer1)
・AMIの作成と起動
・RDSに保存されているURLの書き換え
・トップページを編集(WebServer2)
・ロードバランサーを作成
・RDSに設定されているサイトアドレスを書き換え
・ロードバランサーが動作していることを確認
・セキュリティグループの設定を変更
・障害テスト
・RDSを冗長化
・RDSがマルチAZでフェイルオーバーするか確認


・前回作成したEC2インスタンスを開始にする
-
　前回作成したEC2インスタンスが停止済みとなっていると思いますので、開始にします。
　
＊504 Gateway Timeoutと表示される場合、前回記事の「EC2再起動後に発生する問題を回避するためには」を実施してください。

・RDSを復元
-
前回保存したスナップショットからRDSを復元します。

・ブラウザからブログが閲覧できることを確認
-
EC2インスタンスからパブリックIPアドレスをブラウザに張り付け、ブログにアクセスできるか確認します。

・トップページを編集(WebServer1)
-
ブログを表示する際、どのサイトにアクセスしているか判別しやすくするためトップページを編集します。
ターミナルからEC2にSSH接続でログインし、管理者権限にスイッチします。
viを使ってindex.phpを編集します。


・AMIの取得と起動
-
AMIの取得を行う際、インスタンスを停止してからイメージを作成します。
AMIから作成したEC2は基と同じスペックを選択しますが、サブネットは「PublicSubnet2｜ap-northeast 1c」を選択します。


・RDSに保存されているURLの書き換え
-
ブログにアクセスしようとすると失敗してしまうはずです。
理由はWordpressの仕様なのですが、対処方法として前回記事の「EC2再起動後に発生する問題を回避するためには」を実施してください。

・トップページを編集(WebServer2)
-
新たに作成したEC2からアクセスした場合はWebServer2と表示するよう編集します。

・ロードバランサーを作成
-
今回はALBを選択しました。
2つのEC2をターゲットとにするよう設定します。


・RDSに設定されているサイトアドレスを書き換え
-
RDSにはEC2のパブリックIPアドレスが設定されている状態ですので、ロードバランサーのDNS名に登録し直します。


・ロードバランサーが動作していることを確認
-
ロードバランサーのDNS名をブラウザのアドレスバーに張り付けると、ブログサービスにアクセスできます。
更新ボタンを押すと、トップページの表示が変わればロードバランサーが正常に動いていることが確認できます。

・セキュリティグループの設定を変更
-
現状だと、Webサーバーのセキュリティグループが全ての接続元からの80番通信が許可されているため、
ロードバランサーのセキュリティグループからの通信のみOKとするよう設定を変更する

・障害テスト
-
障害テストでは、EC2インスタンスの片方を停止状態にし、ブログを閲覧できるか確認しました。

・RDSを冗長化
-
オプション機能から簡単に冗長化することが出来ます。
RDS画面から「マルチAZ配置」を「スタンバイインスタンスを作成する (本稼働環境向けに推奨)」に変更します。
その後、変更を適用するタイミング：「すぐに適用」に変更することで適用されます。
＊１０分ぐらい待つと、データベースのステータスが「利用可能」、マルチAZが「あり」となります。

・RDSがマルチAZでフェイルオーバーするか確認
-
再起動を選択すると「フェイルオーバーで再起動しますか?」と聞かれるため実行する。
その時にブログが閲覧できることを確認します。

データベースのログからMulti-AZ instance failover completed」が確認できればハンズオン完了です。



サービス停止
-
お約束ですが、下記サービスを使わないときは切っておきましょう。

■EC2(オンデマンド)→停止中にすること

■RDS(オンデマンド)→スナップショットを取って削除すること

■ALB→削除すること

今回はZAICOさんの記事を参考にALBの削除を行いました。


[AWSのコスト、気にしてますか？](https://www.zaico.co.jp/engineer/aws%E3%81%AE%E3%82%B3%E3%82%B9%E3%83%88%E3%80%81%E6%B0%97%E3%81%AB%E3%81%97%E3%81%A6%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/ "AWSのコスト、気にしてますか？")

ハンズオン2に発生する費用一覧
-
・EC2 x 2
・データ転送
・ALB
・RDSx 2

おおよそ1時間に10円ほどです。
月額だと7000円ほど。

cloudcraftだと1時間に18円ほどです。
　※この差分については今後突き詰めていきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465906/51558dcb-c6b1-5ca0-bbfb-f15073a14695.png)




最後に
-

前回の記事はコチラ↓↓↓
[AWSを使ってシングル構成のブログサービスを構築しました](https://qiita.com/zetzetn/items/197c2ddd2839d499faf7 "AWSを使ってシングル構成のブログサービスを構築しました")


AWS CloudTechの課題としてこれらが残っていますので、
やったことを今後のQiita記事にして発信していきたいと思います。

これから始められる方の参考になれば嬉しいです。

今後の学習予定↓↓↓
・独自ドメインの設定と障害時の設定
・HTTPS通信でのアクセス
・キャッシュサーバーの配置
・CloudFormationの作成、更新
・Lamda関数
・Docker

内容に不備がございましたら、ご指摘いただけますと幸いです。

この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」のハンズオンを基に作成しました。