AWS基礎入門チュートリアル – ALBによるロードバランシング・負荷分散編

  • このエントリーをはてなブックマークに追加

複数台の EC2 を用意できましたので、ALB を使ってロードバランシングをしてみましょう。

AWS 基礎入門チュートリアルについて

このページは AWS 基礎入門チュートリアル の一部です。 AWS チュートリアル全体は AWS 基礎入門チュートリアル を参照してください。

AWS で ロードバランシングをどうやって実現するか

AWS で ロードバランシングをどうやって実現するかですが、下記のようにいくつかの方法があります。

  • ELB (Elastic Load Balancing) の ALB (Application Load Balancer) を使う。
  • ELB の NLB (Network Load Balancer) を使う。
  • ELB の CLB (Classic Load Balancer) を使う。
  • Route53 のヘルスチェック機能を使う。

それぞれ思想の違いやメリット・デメリットはあるのですが、 今回は細かいことは置いといて ALB を使うことにしましょう。

料金について。 ALB は 750時間/月の無料枠があります (12ヶ月無料枠)。 また、ちょっと複雑なのですが、ALB には LCU という指標があり、15 LCU が無料枠として利用可能です。 1 LCU は「1 秒あたり 25 個の新しい接続」が提供されますので、15 LCU となると、 「1秒あたり 375 個の新しい接続」となります。これを 1ヶ月平均で超える場合、 無料枠を超えてしまい、請求が行われます。 「毎秒 375 個の新しい接続」を 1ヶ月継続するというのはよほどのことですので、 悪意のある第三者に狙われて、24時間延々アタックを受けることにならない限り、 これを超えることはないと考えますが、リスクはゼロではないということは認識しておいてください。

左メニューからロードバランサーを選択

「AWS コンソール > EC2」で、左メニューに下記のロードバランサーの項目がありますのでクリックしてください。

ロードバランサー管理画面

すると下記のような画面が表示されるはずです。 ロードバランサーを作成していないため、ロードバランサーがない、と出ています。

では早速「ロードバランサーの作成」ボタンを押下してください。

ロードバランサーの種類の選択

ALB・NLB・CLB の選択をします。ここでは ALB の「作成」ボタンを押します。

ロードバランサーの設定

下記のようなロードバランサーの設定画面が表示されます。

下記のように「名前」に「myalb」と入力します。abc でも hoge でも何でもよいのですが、 後から変更はできないのでわかりやすい名前をおすすめします。その他は変更不要です。

アベイラビリティゾーンの設定

ALB を配置するアベイラビリティゾーンを決めます。

作成済みの 2台の EC2 のアベイラビリティゾーンを確認してください。 当ページ管理人の環境では us-east-2b と us-east-2c でしたので、 us-east-2b と us-east-2c にチェックを入れます。 最低 2つのアベイラビリティゾーンにチェックを入れる必要があります。

アベイラビリティゾーンを設定したら、右下にある「次の手順: セキュリティ設定の構成」ボタンを押下します。

セキュリティ構成の設定

HTTPS を使いましょう、と言われていますが今回は HTTP のみを対象としますので無視します。

右下の「次の手順: セキュリティグループの設定」ボタンを押して次に進みます。

セキュリティグループの設定

下記のようなセキュリティグループ設定画面が表示されます。 デフォルトでは「既存のセキュリティグループを選択する」となっています。 既存のセキュリティグループとして下記があります。

  • launch-wizard-1: 2台の EC2 インスタンスにて使用 (HTTP と SSH ポートを開放)
  • rds-launch-wizard: RDS インスタンスにて使用 (MySQL ポート開放)

launch-wizard-1 を使っても動きはするのですが、管理上わかりづらくなるので 下記のように「新しいセキュリティグループを作成する」にチェックをしましょう。 自動的に

  • セキュリティグループ名: load-balancer-wizard-1
  • ルール: TCP ポート80 について開放

という初期値が設定されます。

この初期値で問題ないので、「次の手順: ルーティングの設定」ボタンを押してください。

ルーティングの設定

下記のようにルーティングの設定画面が表示されます。

下記のようにターゲットグループの「名前」に “mytargetgroup” などと入力してください。 その他は初期値で問題ありません。

「次の手順: ターゲットの登録」ボタンを押してください。

ターゲットの設定

下記のようにターゲットの登録画面が表示されます。 初期状態では「登録済みターゲット」が空ですので、 下にある「インスタンス」からターゲットグループに登録したいインスタンスを選択します。

下記のように 2台の EC2 インスタンスにチェックを入れ、「登録済みに追加」ボタンを押します。

そうすると、「登録済みターゲット」に 2台のインスタンスが追加されました。

右下にある「次の手順: 確認」を押してください。

確認

確認画面です。問題なければ「作成」ボタンを押します。

作成指示完了

数秒で下記の「作成完了」画面が表示されます。 しかしながら例によってこれで本当に完了したわけではなく、 裏側で必要な登録作業が行われています。 「閉じる」ボタンを押してください。

作成中

ロードバランサー一覧画面に遷移します。状態が「provisioning」となっていますので、 まだ準備中であることがわかります。自動リロードはされないので、リロードボタンを押して最新情報に更新してください。 おおむね 5分程度かかるようです。

作成完了

しばらく待つと下記のように状態が「active」になります。これで本当の作成完了です。 画面下の詳細画面に「DNS名: myalb-462806750.us-east-2.elb.amazonaws.com」とあります。 これが今回 ALB に割り当てられた FQDN となります。

左メニューからターゲットグループへ

念のための確認として、左メニューから下記の「ターゲットグループ」を選択してください。

ターゲットグループ確認

下記のようにターゲットグループの情報が表示されます。 画面下部の「ターゲット」タブをクリックして、下記を確認してください。

  • 登録済みターゲット欄にて、インスタンスのステータスが「healthy」になっていること
  • アベイラビリティゾーン欄にて、「正常?」が「はい」になっていること

上記のようになっていないなら何かがおかしいとなります。 EC2 は起動しているか、EC2 のセキュリティグループは、選択したアベイラビリティゾーンに間違いはないかを確認してください。

例えば EC2 を停止した状態だと、下記のように「ステータス」欄が “unused”、 「正常?」欄が「いいえ (アベイラビリティゾーンに正常なターゲットがありません)」となります。

動作確認

動作確認をしてみましょう。

EC2 に直接アクセスする場合は、ブラウザで下記にアクセスしていました。

  • http://[EC2のパブリックIPアドレス]/minitwitter-rds.php

ALB 経由の場合、下記になります。

  • http://[ALBのDNS名]/minitwitter-rds.php

当ページ管理人の場合、http://myalb-462806750.us-east-2.elb.amazonaws.com/minitwitter-rds.php です (常につながる保証はありません)。

何度かブラウザのリロードボタンを押すと、下記のように SERVER_ADDR の IP アドレスが変わると思います。 これは EC2 のプライベート IP アドレスを表示しているものなので、どちらに振り分けられたかを判別できます。

さらに、EC2 インスタンスを 1台落としてみましょう。 下記のように「AWS コンソール > EC2 > インスタンス」より、web-01 と web-02 のいずれかを右クリックして、 「インスタンスの状態 > 停止」としてください。

停止には少し時間がかかりますので、その間

  • http://[ALBのDNS名]/minitwitter-rds.php

をリロードし続けると、停止直後は数十秒ほど待たされることがあると思いますが、 ALB が EC2 のダウンを認識した後は、生きているもう片方の EC2 インスタンスにアクセスが振り分けられます。 こうなると何度リロードしても SERVER_ADDR が全く変わらないことを確認してください。

インスタンスの後始末について

これで負荷分散・フェイルオーバー編は終了です。

起動したインスタンスについてどうすればよいか下記に述べます。 EC2 1台は 12ヶ月無料枠に含まれます。 ALB は、ほとんどの場合 12ヶ月無料枠に含まれますので、そのまま放置しても構いません。 EC2 2台目を起動し続けると 12ヶ月無料対象からあふれてしまいます。 RDS は 12ヶ月無料枠に含まれます。 EBS は 30GB/月 無料ですので、8GB AMI を作成する際、実は EBS スナップショットというものが自動的に作成されているのですが、 これは 1GB/月 無料です。ここが微妙なところで、画面上では 8GB となっていても、 ディスク内で実際に使用している分しか請求されません。しかし、実使用量は画面では確認できません。 当ページ管理人の場合、1GB/月 を若干超えるかもしれない、という状況です。 ただ、1ヶ月あたり 0.05USD/月 ですので、若干超えたとしても 1〜2円程度の請求かなと思っています。

再度 ALB でいろいろ試したいなら下記をおすすめします。 ただし、(*) の部分が微妙にはみでるかもしれません。

  • ALB はそのまま
  • EC2 の1台目はそのまま
  • EC2 の2台目は停止
  • RDS はそのまま
  • AMI はそのまま
  • EC2 1台目の EBS はそのまま
  • EC2 2台目の EBS はそのまま
  • EBS スナップショットはそのまま (*)

絶対に請求を発生させたくない場合は下記を実施してください。 この状態でも、後続のチュートリアルを進めることができます。

  • ALB は削除
  • EC2 の1台目はそのまま (EBS もそのまま)
  • EC2 の2台目は削除 (EBS も同時に削除されます)
  • RDS はそのまま
  • AMI は削除 (AMI を削除しないと、EBS スナップショットを削除できない)
  • EBS スナップショットを削除

次に、高速化の前段として、サンプルアプリケーション mini Twitter にフォロー機能追加 を行います。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

Leave a Reply

*

CAPTCHA