🚥

【AWS入門⑦】ELBでバランスが整いました!

2021/04/25に公開

はじめに

Webサービスに関するインフラの知識不足の解消&クラウドサービスの世界シェア1位であるAWSの学習のため、YouTubeでAWSの学習動画やエンジニアに関する情報を提供している「くろかわこうへい」さんが開催する AWS CloudTech に参加しました。
学習を進める上で習得した技術情報を記載します。

気になる方は以下を参照してください。

注意点

基本的にAWSに関する内容を記載していきます。
ネットワークの基礎的な用語や少し専門的な用語は説明することもあるかもしれませんが、自分が必要と思った際にのみ記載します。
※気になったら調べてみましょう!

ロードバランサー

ロードバランサーという装置を知っていますか?

ロード(load、負荷)+バランサー(Balancer、平衡を保つためのもの)

サーバーにかかる負荷を、平等に振り分けるための装置のことを言います。

この仕組みにより、Webサイトへのアクセス集中やサーバー故障などの場合でも、アクセス中の利用者に安定したサービス提供を継続可能になります。

AWSを使用した構成で以下の場合などは障害に対応できない構成例になります。

単一Webサーバーの構築

EC2を単一で構築し、RDSと接続している状態です。RDSを使用していることでDBの運用面は安全ですがEC2に障害が起こった場合、サービスにアクセスできなくなります。
※RDSに関してはこちらを参照

複数Webサーバーの構築

同じ内容のEC2を別々のサブネットに構築し、同じRDSへ接続している状態です。この場合だと片方のEC2に障害が起こった場合でも、もう片方に接続すればサービスを使用することができます。
しかし、この構成ではEC2は別々のアクセスポイントとなるため接続先を選ぶのはユーザーになります。
ユーザーがこの構成を知っているということはないですし、ユーザーに使い方を強要していては冗長的とは言えません。

ELB(Elastic Load Balancing)

ELBはAWSのロードバランシングサービスです。上記のような障害に対応するための装置がサービスとしてAWSに存在します。

ELBを使用することで以下のような利点があります。

アクセスポイントの付与と負荷分散

ロードバランサーにDNS名のアクセスポイントが付与されます。

アクセスポイントが一つに集約することによって、集中したアクセスをELBが各EC2インスタンスの負荷状況を確認し、自動的にアクセス先を選択してくれます。

図の上のEC2に負荷がかかっている場合、その負荷を検知して下のEC2へリクエストを流すといった処理を行います。

ヘルスチェック機能

異常なインスタンスを検知し、通信をストップしてくれる機能です。
ヘルスチェックの対象として登録されたEC2へ定期的にリクエストを送信し、正しいレスポンスが返ってくるかを確かめます。

異常を検知したインスタンスへは通信を行わないようELBが制御してくれるため、安定したサービスの運用が実現できます。
また、ヘルスチェックの間隔や回数を自分で設定することができます。

SSL証明書の付与(SSLターミネーション)

アクセスポイントとなるELBへSSL証明書を付与することでSSL通信の終端になります。

AWS上のSSL/TLS証明書はCertificate Managerで作成できます。

ELBの種類

ここまでELBの利点を記述してきましたが、ELBとは用途によって使い方の違う以下の種類のロードバランサーの総称になります。

  • ALB(Application Load Balancer)
  • NLB(Network Load Balancer)
  • GWLB(Gateway Load Balancer)
  • CLB(Classic Load Balancer)
※2021年3月現在

それぞれの特徴を記載していきます。

※以下の記述の中に「レイヤー」という言葉が出ますが、分からない方は「OSI参照モデル」を調べてみてください。
参考サイト

Application Load Balancer

レイヤー7(HTTP/HTTPS)だけで機能するアプリケーション層に特化したロードバランサーとなっています。Webサイトにかかる負荷を分散するロードバランサーとして使用するのであれば最適となっています。

Network Load Balancer

レイヤー4(TCP/UDP)で機能するロードバランサーです。固定のIPアドレスを設定でき、高トラフィックを処理できます。ALBとの使い分けとしてはAWSの外部向けか内部向けかで使い分けること事例が多いようです。

Gateway Load Balancer

2021年4月現在、新サービスということもあり情報が少ないため調査し次第記載します。

Classic Load Balancer

レイヤー4(TCP/UDP)とレイヤー7(HTTP/HTTPS)に対してのロードバランサーになります。以前までは、AWSのロードバランサーといえばCLBのことでしたがALB、NLBが登場し、CLBが旧世代のロードバランサーと位置付けられています。

用途としてはALB、CLBの両面の特性を持ちますが各特性に特化したALB、NLBが登場してからはあまり積極的に使われることはなくなってきています。

実際にロードバランサーの動作を確認してみた

実際に以下の画像のようにWordPressのサーバーを2つ構築し、ロードバランサーで画面表示がどのように変わるか試してみます。

※細かな設定を省略していることもありますがご了承ください

VPCとSubnet

VPCを以下のように作成

Subnetを以下のように作成

SubnetGroup

RDSのコンソールから「サブネットグループ」を作成

対象のアベイラビリティゾーンは
・ap-northeast-1a
・ap-northeast-1c

対象のサブネットは
・PrivateSubnet1
・PrivateSubnet2

をそれぞれ選択します。

RDS

RDSのコンソールから「データベース」を作成

  • DBエンジンはMySQLを選択
  • DBインスタンスタイプはt2micro、ストレージは汎用を選択

※安価なタイプを選択しています。

  • 接続情報では作成したサブネットグループを選択
  • 最初のデータベース名にwordpressと入力し、その他はデフォルト設定
  • 作成されたDBを確認

※RDSのために作成したセキュリティグループ「RDS-SG-1」はDBを作成後、インバウンドルールを編集して、EC2のセキュリティグループからのみ接続できるようにすることをお勧めします。

EC2

  • ステップ1:マシンイメージ
    ⇒Amazon Linux 2 AMI

  • ステップ2:インスタンスタイプ
    ⇒t2micro

  • ステップ3:インスタンスの詳細
    ⇒上記で作成したVPCとPublicSubnet1を選択

  • ステップ4:ストレージの追加
    ⇒デフォルトから変更なし

  • ステップ5:タグの追加
    ⇒キー:Name、値:WebServer1

  • ステップ6:セキュリティグループの設定
    ⇒タイプ:SSH、プロトコル:TCP、ポート範囲:22、ソース:0.0.0.0/0
     タイプ:HTTP、プロトコル:TCP、ポート範囲:80、ソース:0.0.0.0/0,::/0

上記の設定で作成し、SSHで接続しましょう。
※作成時のキーが必要になります。

以下のコマンドを実行してWORDPRESSをダウンロード&インストールしましょう。

sudo su -

yum -y update

amazon-linux-extras install php7.2 -y
yum -y install mysql httpd php-mbstring php-xml gd php-gd

systemctl enable httpd.service
systemctl start httpd.service

wget http://ja.wordpress.org/latest-ja.tar.gz ~/
tar zxvf ~/latest-ja.tar.gz
cp -r ~/wordpress/* /var/www/html/
chown apache:apache -R /var/www/html

これらの設定が終わり次第、EC2のパブリックIPアドレスでブラウザからアクセスしてみましょう。
セットアップ画面が表示されれば成功です。

WORDPRESSの設定でRDSのエンドポイント情報が必要になるので確認しておきましょう。

ここから先の設定はWORDPRESS自体の設定になるので割愛

AMI

上記の状態のEC2をAMIとしてイメージを作成しておきます。

このAMIから復元したEC2をPublicSubnet2に配置することで、同じ構成でWORDPRESSがインストールされたEC2が2つ存在することになります。

途中経過

現状だとロードバランサーがなく各EC2がそれぞれIPアドレスを持っているので、各EC2へアクセスしなければいけません。
つまり共通のDBを持ち、同じ内容を表示させるサイトなのにURLは分かれている状態です。

ELB

今回はALBを使用します。
構築は以下の手順

作成が完了し一覧に表示されることを確認
その際、DNS名を確認しておきましょう。
DNS名が接続URLになります。

実際にDNS名で接続してみます。
※どちらのEC2に接続しているかわかりやすいよう、それぞれのTOP画面にWeb Server1Web Server2と表示されるようにしています。

ロードバランサーが自動で接続先を制御しているため、ページを何度かリロードすればどちらのページも表示されます。

この状態から、片方のEC2を停止した場合の動作など確認しロードバランサーの役割のイメージを把握できれば良いと思います。

まとめ

ロードバランサーという言葉を聞いたことがある人は多いと思いますが、実際に体験できる人はかなり少ないかなと思います。AWSのELBであればだれでも触れることができ、実際に障害を起こしたりしないでもEC2を停止させて障害発生の想定動作を確認できるのが良いですね。

前回の記事

【AWS入門⑥】AWSのDB~RDSの特徴~

次回の記事

⇒作成中

Discussion