#環境
Amazon Web Service
- EC2(t2.micro)
- RDS
ローカルPC
- MacBook Pro(2.9 GHz デュアルコアIntel Core i5 , 8 GB 2133 MHz LPDDR3)
- macOS 11.3.1(20E241)
#作業概要
EC2インスタンスがシングルポイントとなっているため、EC2がダウンするとWebServerにアクセスできなくなってしまう。そこで、複製したEC2とロードバランサーを追加することにより、EC2がダウンした時にもう1台のEC2へアクセスできるようにしてサービスの冗長化を図る。
###Before
###After
#ALBの導入
###ALBの作成
ロードバランサー > ロードバランサーの作成
をクリックする。
###手順 1: ロードバランサーの設定
名前:LB-1
スキーム:インターネット向け
VPC:MyVPC
アベイラビリティゾーン:
ap-northeast-1a PublicSubnet1
ap-northeast-1c PublicSubnet2
###手順 3: セキュリティグループの設定
セキュリティグループの割り当て:新しいセキュリティグループを作成
セキュリティグループ名:LB-SG-1
ルール(デフォルト)
タイプ|プロトコル|ポート範囲|ソース
---|---|---|---|---|---|---
カスタム TCP|TCP|80|カスタム 0.0.0.0/0, ::/0
###手順 4: ルーティングの設定
ターゲットグループ:新しいターゲットグループ
名前:TG-1
ヘルスチェックパス: /readme.html
ヘルスチェックの詳細設定
10秒ごとにヘルスチェック通信を飛ばして、2回OKだったら正常とみなす。
正常のしきい値:2
間隔:10
###手順 5: ターゲットの登録
WebServer1,2を登録済みに追加する。
###確認
問題なければ作成をクリックする。
###ヘルスチェック正常性確認
ターゲットグループ > TG-1
でインスタンスのステータスが healthy であることを確認する。
###RDSに設定されているサイトアドレスをALBのDNS名に書き換える
- EC2インスタンスにSSH接続し、以下コマンドを入力してRDSにアクセスする。
mysql -h database-1.xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u username -p
コマンド | 内容 |
---|---|
-h | ホスト名を指定オプション |
database~.com | RDSのエンドポイント |
-u | ユーザ名オプション |
username | ユーザ名 |
-p | パスワードオプション |
-pオプションにより、パスワードを求められるのでパスワードを入力する。 |
-
wordpress
のテーブルを使用することを宣言する。
MySQL [(none)]> USE wordpress
- 現在のサイトアドレスを確認する。(WebServer1になっている)
MySQL [wordpress]> SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
+-----------+-------------+----------------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------+----------------------+----------+
| 2 | home | http://xxx.xxx.xx.xx | yes |
| 1 | siteurl | http://xxx.xxx.xx.xx | yes |
+-----------+-------------+----------------------+----------+
- サイトアドレスをALBのDNS名に更新する。
MySQL [wordpress]> UPDATE wp_options SET option_value = 'LB-1-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com' WHERE option_name IN ('siteurl', 'home');
- サイトアドレスが更新されていることを確認する。(ALBのDNS名)
MySQL [wordpress]> SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
+-----------+-------------+--------------------------------------------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------+--------------------------------------------------+----------+
| 2 | home | LB-1-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com | yes |
| 1 | siteurl | LB-1-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com | yes |
+-----------+-------------+--------------------------------------------------+----------+
###ブログサイトにALBのDNS名でアクセスできることを確認する
- ALBのDNS名
LB-1-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com
をブラウザのURL欄に入力して、ブログサイトにアクセスできるか確認する。 - 何度も更新ボタンを押してアクセスすると、WebServer1にアクセスしたり、2にアクセスしたりする。
###インターネットからWebServerへ直接のアクセスを拒否する
現状のWebServerのセキュリティグループの設定だとインターネットからWebServerへ直接アクセスできるようになっているため、ロードバランサーを経由しないとアクセスできないようにする。変更概要は以下。
[http,ssh]インターネット → EC2インスタンス(WebServer)
↓↓↓
[http] インターネット → ロードバランサー → EC2インスタンス(WebServer)
[ssh] インターネット → EC2インスタンス(WebServer)
- WebServerのセキュリティグループ(Web-SG-1)を修正する。
タイプ | プロトコル | ポート範囲 | ソース | 説明 - オプション |
---|---|---|---|---|
HTTP | TCP | 80 | sg-xxxxxxxxxx / LB-SG-1 | – |
SSH | TCP | 22 | 0.0.0.0/0 | – |
- セキュリティグループを修正後も、変わらずWebServerにアクセスできることを確認する。
#障害試験
EC2インスタンスを片系にした場合でも、正常にWebページが表示されるか確認
試験項番 | WebServer1 | Webserver2 | アクセスした際に表示されるサーバ名 |
---|---|---|---|
1. | 起動 | 起動 | 両方 |
2. | 停止 | 起動 | WebServer2のみ |
3. | 起動 | 停止 | WebServer1のみ |
4. | 起動 | 起動 | 両方 |