【AWS】冗長性のあるブログサービスを構築してみた。
はじめに
この記事はインフラ初心者の私がAWS Cloudtechを通して学んだことを
記録&アウトプットするための備忘録です。
ゴール
耐障害性が高い冗長化の構成を構築する。
目的
・冗長化構成の環境構築をできるようにする。
・RDSのマスター/スレイブについて理解する。
環境
・Windows10
・TeraTerm Version 4.105
・Word Press Version 5.7
環境構築
手順
事前準備
前回のハンズオン後にEC2の停止とRDSの削除を実施したため事前準備を実施
①EC2の起動
対象のWebServerを選択して[インスタンスの開始]をクリック
②RDSの復旧
RDSのメニューの左ペインから[スナップショット]を選択。
一覧から対象のスナップショットを選び、[スナップショットを復元]をクリック
設定画面-1
DBの仕様:MySQL Community
設定のDBインスタンス識別子をdatabase-1とする
VPC:test-vpc
サブネットグループ:test-subnetgroup
パブリックアクセス可能:なし
VPCセキュリティグループ:既存の選択→RDS-SG-1を選択
DBインスタンスサイズ:バースト可能クラス
以前の世代のクラスを含めるを有効にする
ストレージ:デフォルト設定でOK
設定画面-4 以下設定をして[DBインスタンスの復元]をクリック
可用性と耐久性
マルチ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>';
を入力してctrl + c → :wqで保存して閉じる
AMIの作成
①EC2インスタンスを停止後、[イメージを作成]をクリック。
②イメージ名とイメージの説明を入力後、[イメージを作成]をクリック
※その他は今回はデフォルト設定
⑤詳細は割愛するが、以下設定でインスタンスを作成
インスタンスタイプ:t2.micro
インスタンスの設定:ネットワーク test-vpc , サブネット PublicSubnet2 ,自動割り当てパブリックIP 有効
ストレージの追加:デフォルト
タグの追加:Nameタグ WebServer2
セキュリティグループの設定: 既存のセキュリティグループ WebServer1と同じもの(Web-SG-1)
キーペア:WebServer1と同じもの
⑥WebServer2にログインしてindex.phpの内容に変更を加える
Web Server 1となっていた箇所をWeb Server 2に変更して保存。
⑦Webserver1を起動しておく。
ELBの作成
①EC2メニューの左ペインから「ロードバランサー」を選択して[ロードバランサーを作成]をクリック
②ALBを作成
※Gateway Load Balancerなんてあるの初めて知った。
③赤枠箇所を設定して[次の手順:セキュリティ設定の構成]をクリック
設定画面-1
(リスナーはデフォルト設定)
設定画面-2
VPCはtest-vpc , アベイラビリティーゾーンはPublicSubnet1,2を選択
④新しいセキュリティグループを作成し、[次の手順:ルーティングの設定]をクリック
⑤ターゲットグループを画面のように設定して、[次の手順:ターゲットの登録]をクリック
設定画面-1
設定画面-2
※10秒間隔でヘルスチェックを行い、2回連続でヘルスチェックが成功することで正常とみなすように設定
⑥ターゲットに登録するインスタンスを選択して[登録済みに追加]をクリック後、[次の手順:確認]をクリック
⑧ロードバランサーが正常に作成されたことを確認して、[閉じる]をクリック
作成したターゲットグループのTargetsタブからインスタンスのヘルスチェック結果を確認することができる。
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は未知です。ワクワク)
②wordpressのDBを使用するコマンドを実施
USE wordpress
③SELECT文を実行する
SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
WebServer1のパブリックIPになっているため変更する
③LBのDNS名でアップデート文を実行する。
※サイトアドレス箇所にロードバランサーのDNS名をコピーして貼り付ける
UPDATE wp_options SET option_value = 'http://xx.xx.xx.xx' WHERE option_name IN ('siteurl', 'home');
SELECT文を再実行してテーブルの内容がUPDATEされていることを確認。
siteURLとhomeURLがLBのDNS名に変更されています。
パブリックIPを検索窓に貼り付けてブログが閲覧できることを確認。
また、更新ボタンをクリックしてWebServer1,2の表示が切り替わっていることから、
LBが正常に動作していることを確認。
※gif初めて使いましたが便利ですね~
SG設定変更
現在の設定だとすべてのHTTP通信を許可していることになるため、LBからの通信のみを許可するようにSGの設定を変更
障害確認
インスタンス停止後も問題なくブログを閲覧できるかを確認する。
停止後もWebServer2で引き続きブログを閲覧できることを確認。
RDSの冗長化
②設定画面の可用性と耐久性の「マルチAZを配置」を[スタンバイインスタンスを作成する]に変更
③変更内容を確認して問題がなければ、[DBインスタンスを変更]をクリック
変更が完了してDBのステータスが利用可能になった後、マルチAZありになっていることを確認
RDSのマルチAZ化が完了。
③RDSを手動で再起動してRDSがフェイルオーバーするか確認する。
※フェイルオーバーとは障害発生時に自動的に予備のシステムに切り替えること。
(SAAの試験対策問題でも何度か登場した用語でしたが、知識が定着していなかったので今回のハンズオンで定着させます笑)
フェイルオーバーで再起動しますか?にチェックを入れて[確認]をクリック
再起動実施後、failoverされていることをログとイベントから確認
※スレーブ機では参照のみで書き込みはできない。
終わりに
冗長化構成の環境構築について学びました。
自分は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個のテーブルがあり、投稿やユーザ情報などを保管するテーブルがあるみたいです。
詳しくは以下のサイトに載っています。
Author And Source
この問題について(【AWS】冗長性のあるブログサービスを構築してみた。), 我々は、より多くの情報をここで見つけました https://qiita.com/AWSnm88/items/8c1be32474e576c0fa4f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .