1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[AWS_21]ALBを導入してブログサイトを冗長化する

Last updated at Posted at 2022-02-06

#環境
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
構成図06.png
###After
構成図08.png

#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. 起動 起動 両方
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?