LoginSignup
0
0

More than 3 years have passed since last update.

【AWS】冗長性のあるブログサービスを構築してみた。

Last updated at Posted at 2021-03-28

はじめに

この記事はインフラ初心者の私がAWS Cloudtechを通して学んだことを
記録&アウトプットするための備忘録です。

ゴール

耐障害性が高い冗長化の構成を構築する。

目的

・冗長化構成の環境構築をできるようにする。
・RDSのマスター/スレイブについて理解する。

環境

・Windows10
・TeraTerm Version 4.105
・Word Press Version 5.7

環境構築

最終的な構成図
image.png

手順

事前準備

前回のハンズオン後にEC2の停止とRDSの削除を実施したため事前準備を実施
①EC2の起動
対象のWebServerを選択して[インスタンスの開始]をクリック
image.png

②RDSの復旧
RDSのメニューの左ペインから[スナップショット]を選択。
一覧から対象のスナップショットを選び、[スナップショットを復元]をクリック
image.png

設定画面-1
DBの仕様:MySQL Community
設定のDBインスタンス識別子をdatabase-1とする
image.png

設定画面-2
接続
image.png

VPC:test-vpc
サブネットグループ:test-subnetgroup
パブリックアクセス可能:なし
VPCセキュリティグループ:既存の選択→RDS-SG-1を選択

設定画面-3
image.png

DBインスタンスサイズ:バースト可能クラス
以前の世代のクラスを含めるを有効にする
ストレージ:デフォルト設定でOK

設定画面-4 以下設定をして[DBインスタンスの復元]をクリック
image.png

可用性と耐久性
マルチAZ配置:スタンバイインスタンスを作成しないでください
アベイラビリティーゾーン:ap-northeast-1a

データベース認証:パスワード認証

EC2インスタンスのパブリックIPを検索窓に貼り付けブログ閲覧できるかを確認する。

インスタンスログイン後の手順

インスタンスにログインしroot権限に変更

sudo su -

/var/www/html/に移動

cd /var/www/html/

llで確認後、viコマンドでindex.phpを開く

vi index.php

define~配下にカーソルをあててoでINSERTモードにする

echo '<p>Web Server 1</p>';

image.png

を入力してctrl + c → :wqで保存して閉じる

AMIの作成

①EC2インスタンスを停止後、[イメージを作成]をクリック。

image.png

②イメージ名とイメージの説明を入力後、[イメージを作成]をクリック
※その他は今回はデフォルト設定
image.png

③インスタンスメニューから[インスタンスを起動]をクリック
image.png

④先ほど作成したAMIを選択する
image.png

⑤詳細は割愛するが、以下設定でインスタンスを作成
インスタンスタイプ:t2.micro
インスタンスの設定:ネットワーク test-vpc , サブネット PublicSubnet2 ,自動割り当てパブリックIP 有効
ストレージの追加:デフォルト
タグの追加:Nameタグ WebServer2
セキュリティグループの設定: 既存のセキュリティグループ WebServer1と同じもの(Web-SG-1)
キーペア:WebServer1と同じもの

⑥WebServer2にログインしてindex.phpの内容に変更を加える
Web Server 1となっていた箇所をWeb Server 2に変更して保存。

image.png

⑦Webserver1を起動しておく。

ELBの作成

①EC2メニューの左ペインから「ロードバランサー」を選択して[ロードバランサーを作成]をクリック
image.png

②ALBを作成
※Gateway Load Balancerなんてあるの初めて知った。
image.png

③赤枠箇所を設定して[次の手順:セキュリティ設定の構成]をクリック
設定画面-1
(リスナーはデフォルト設定)
image.png

設定画面-2
VPCはtest-vpc , アベイラビリティーゾーンはPublicSubnet1,2を選択
image.png

④新しいセキュリティグループを作成し、[次の手順:ルーティングの設定]をクリック
image.png

⑤ターゲットグループを画面のように設定して、[次の手順:ターゲットの登録]をクリック
設定画面-1
image.png

設定画面-2
※10秒間隔でヘルスチェックを行い、2回連続でヘルスチェックが成功することで正常とみなすように設定
image.png

⑥ターゲットに登録するインスタンスを選択して[登録済みに追加]をクリック後、[次の手順:確認]をクリック
image.png

⑦内容を確認して問題がなければ、[作成]をクリック
image.png

⑧ロードバランサーが正常に作成されたことを確認して、[閉じる]をクリック
image.png

作成したターゲットグループのTargetsタブからインスタンスのヘルスチェック結果を確認することができる。
image.png

RDSの操作

RDSの中に設定されているサイトアドレスをロードバランサーのDNS名に書き換える
①WebServer1 or WebServer2にログインして以下のコマンドを実施

mysql -h database-1.xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u wordpress -p

※database-1.xxxxxx~の箇所にはRDSのエンドポイントを入れてください。

コマンド実行後、パスワードを入力してMySQlにログインすることができました。
(私はOracleDBしか触ったことがないのでMySQLは未知です。ワクワク)

image.png

②wordpressのDBを使用するコマンドを実施

USE wordpress

③SELECT文を実行する

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

WebServer1のパブリックIPになっているため変更する
image.png

③LBのDNS名でアップデート文を実行する。

※サイトアドレス箇所にロードバランサーのDNS名をコピーして貼り付ける

UPDATE wp_options SET option_value = 'http://xx.xx.xx.xx' WHERE option_name IN ('siteurl', 'home');

image.png

SELECT文を再実行してテーブルの内容がUPDATEされていることを確認。
siteURLとhomeURLがLBのDNS名に変更されています。
image.png

パブリックIPを検索窓に貼り付けてブログが閲覧できることを確認。
また、更新ボタンをクリックしてWebServer1,2の表示が切り替わっていることから、
LBが正常に動作していることを確認。
Videotogif-1.gif

※gif初めて使いましたが便利ですね~

SG設定変更

現在の設定だとすべてのHTTP通信を許可していることになるため、LBからの通信のみを許可するようにSGの設定を変更

変更前
image.png

変更後
image.png

変更後も問題なくブログにアクセスできることを確認
Videotogif-2.gif

障害確認

インスタンス停止後も問題なくブログを閲覧できるかを確認する。

WebSerber1を停止する。
image.png

停止後もWebServer2で引き続きブログを閲覧できることを確認。
Videotogif-3.gif

RDSの冗長化

①対象のDBを選択して[変更]をクリック
image.png

②設定画面の可用性と耐久性の「マルチAZを配置」を[スタンバイインスタンスを作成する]に変更
image.png

その他の設定はデフォルトのまま、[続行]をクリック
image.png

③変更内容を確認して問題がなければ、[DBインスタンスを変更]をクリック
image.png

変更が完了してDBのステータスが利用可能になった後、マルチAZありになっていることを確認
image.png

RDSのマルチAZ化が完了。

③RDSを手動で再起動してRDSがフェイルオーバーするか確認する。
※フェイルオーバーとは障害発生時に自動的に予備のシステムに切り替えること。
(SAAの試験対策問題でも何度か登場した用語でしたが、知識が定着していなかったので今回のハンズオンで定着させます笑)

RDSを選択してアクションから[再起動を選択]
image.png

フェイルオーバーで再起動しますか?にチェックを入れて[確認]をクリック
image.png

再起動実施後、failoverされていることをログとイベントから確認
image.png
image.png

※スレーブ機では参照のみで書き込みはできない。

終わりに

冗長化構成の環境構築について学びました。
自分はDBはOracleのGUIのやつ(SQL Developer)しか触ったことがなかったので、MySQLをCLIで触ったのはいい経験になったと思います。(まだ全然触ってないですが笑)
MySQLの良さげなQiitaの記事を見つけたのでこちらでMySQLの操作を少しずつ覚えていこうと思います。
よく使うMySQLコマンド集

このハンズオンはAWS CloudTechのもくもく会中に実施したのですが、かなり集中して取り組むことができました。
今後ももくもく会には積極的に参加していきたいと思います。

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

おまけ:gif画像の作成方法

今回初めてGIF画像を作ったのですが、Windows10の標準機能と標準搭載アプリで動画を作成し、
フリーサイトでgifを作成しました。
他にも調べればもっと良いツールがあるかもしれません。

■参考URL
Windows10 の標準機能で画面録画の動画とキャプチャを撮る方法「スクリーンショット」
Windows10 で動画のトリミング(切取り)をする方法「フォト ビデオエディター」
動画をGIFに変換

おまけ:WordPressのDBのテーブル一覧

WordPressのDB内にあるwp_optionsというテーブルを今回のハンズオンで触りましたが、
どんな構造なのか軽く調べてみました。
12個のテーブルがあり、投稿やユーザ情報などを保管するテーブルがあるみたいです。
詳しくは以下のサイトに載っています。

■参考URL
WordPressのデータベースの中身はどうなっているのか?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0