この記事の目次
AWSのロードバランサーELB/ALBの使い方と料金例

ロードバランサーとは何か
ロードバランサーとは、名前の示す通りサーバー負荷(ロード)を振り分けるための装置(バランサー)です。AWSに固有の機能ではなく、サーバーの負荷分散装置として広く使用されています。 大量のアクセスを複数のサーバーに振り分けて処理すれば、負荷が高すぎることによる性能低下を防止できます。(負荷分散) また、同じ役割を担うサーバーが複数あるため、仮に一部に故障が発生してもシステム全体の停止という最悪の状態を避ける事ができます。(冗長化)サーバーのリソース
CPUやメモリーといったサーバーの能力をリソース(資源)といいます。 一例として、ウェブサーバーの動作を考えてみましょう。ウェブサーバーはインターネットに接続されており、クライアント(ウェブブラウザ等)からの要求に応じてウェブページを表示するために必要なデータを応答する役割を担っています。 アクセス要求を受けると、サーバーは要求(ウェブページの表示)に応答するためにHTMLが記述されたファイルをメモリーに読み込みます。 ファイルにPHPなどのプログラムが記述されている場合は、CPUの能力を使用して計算を実行し、処理結果をウェブページのデータとしてクライアントに送信します。このように、アクセスに応じてリソースが使用されます。サーバー負荷とは何か
サーバーのリソースの使用率が高い状態が、サーバー負荷が高い状態です。 先程と同様に、ウェブサーバーの負荷を考えてみましょう。アクセスが少ないうちは、1つの要求に応答するだけなので何の問題もないでしょう。 しかしインターネットに接続されているという事は、世界中からアクセス要求がやってきます。有力インターネットニュースに掲載された場合などは、短時間に通常の何百倍ものアクセスが押し寄せてくるケースも珍しくありません。 アクセスが集中すると、それに比例してサーバーのリソース使用率も急増します。リソースは有限なので、限界を超えてしまうと空きが出るまでページの表示を待つ状態になって速度が低下したり、極端な状態だとサーバーそのものが落ちてしまうケースもあります。ウェブサーバー負荷の対策方法
ピーク負荷に対応できる性能と、負荷が低い時のコスト削減を両立させるためにロードバランサー導入を検討してみましょう。 単純に負荷対策を考えれば、より高性能なサーバーを用意すれば良いという事になります。想定される中で最も負荷が高い状態(ピーク負荷)に対応できるスペックのサーバーを用意するのが理想です。 しかし一般的なウェブサイトであれば、深夜や早朝といった時間帯はアクセスが少なく負荷が低い事が予想されます。その時間帯に高性能なサーバーを稼働させておくのは、無駄な料金が発生してしまう事になります。 更にウェブサイトのアクセス状況は常に変動しており、同様にサーバーの負荷も変動します。先程のニュースの例以外にも、アクセスが急増し負荷が高まる要素はたくさんあります。サーバー負荷は事前に予測が困難なものも多いのです。ロードバランサーを使わない負荷分散
ロードバランサーを使わない負荷分散として、DNSラウンドロビンという手法もあります。DNSサーバーのゾーンファイル上の情報を用いた手法で、サーバー名に対して複数のIPアドレスを割り当てることで実現します。 ウェブサイトにアクセスするためには、URLが示すサーバーのIPアドレスが必要になります。IPアドレスを提供するDNSサーバーは、リクエストがあるたびに異なったIPアドレスを返します。これによりアクセス毎に異なるサーバーに接続されるため、負荷分散が実現できます。 AWSでもDNSラウンドロビンを使用できます。特にDNSにRoute53を使用しているのであれば追加料金不要で、サーバーの死活監視も含めた設定も可能となり手軽に負荷分散を実現できます。 ただしあくまで簡易的な手法のため、規模が大きくなってくると本格的な冗長化・負荷分散へ対応が難しくなるなどの事情も出てきます。本番システムへ向けた構築であれば、当初からロードバランサーを使用するほうが良いでしょう。AWSでELB(ALB)を導入する
ELBとはAWSが提供するロードバランサー機能の総称です。現在、用途の異なる3つのタイプのロードバランサーがあります。 アクセスを振り分けるという基本的な動作は同じですが、性能や用途、料金体系が異なります。CLB(Classic Load Balancer)
昔からあるロードバランサーサービスです。シンプルな機能なので、手軽に負荷分散に対応できます。 Classicの名の通り古いタイプのロードバランサーなので、これから導入する際には特別な理由がない限りはALBを選択しましょう。ALB(Application Load Balancer)
CLBより後に発表された高機能なタイプのロードバランサーです。これからウェブサーバー用にロードバランサーを導入するのであれば、ALBが最適です。 多少設定は複雑になりますが、ALBではHTTP/HTTPSレベルの負荷分散が可能です。例えば、アクセスされたURLに応じて割り振るサーバーを変えるといった複雑な負荷分散が可能となります。NLB(Network Load Balancer)
大規模ネットワーク向けの負荷分散用ロードバランサーです。ウェブサーバー用途には向かないため、今回は紹介のみにとどめておきます。SSL証明書も無料に
サイトをHTTPS化する際には、SSL証明書が必要になります。証明書の購入料金が発生する事も多く、導入や更新には多くの場合ターミナル操作が必要となりサーバー運用の知識が必要になります。 ACM(AWS Certificate Manager)を使用すると、SSL証明書が無償で発行できます。ALBと組み合わせると、面倒なSSL証明書更新作業も自動になり、運用上の手間を減らせるメリットがあります。SSLに必要な暗号化処理をALBが処理するため、ウェブサーバーのCPU負荷が減るというメリットもあります。ALBの料金体系
ALBの利用料金は、稼働時間やデータ量に応じて計算されます。急激なアクセス数の増加が予想される場合、事前連絡によりALBの暖機運転(事前の性能アップ)も対応してくれます。 とはいえALB自体がそもそも大規模なアクセスへ対応するシステムなので、負荷に応じて自動的に拡張される設計になっています。よほどの大規模サービスでない限りは考慮しなくて良いでしょう。ELBの課金単位
AWSの各機能の料金はリージョンによって違い、しかもかなり高頻度で見直されます。使用前に必ず公式のマニュアルで料金を確認するようにしましょう。 ALBは単体で使用するものではなく、通常はEC2などのサーバーと組み合わせての使用になります。料金計算が複雑でわかりにくいようであれば、AWS公式から提供されている料金試算ツールなどを使ってトータルコストを把握するようにしてください。 CLBは使用1時間あたり、およびロードバランサーで処理されたデータ量(GBあたり)で課金されます。ALBは使用時間として1時間あたり、またデータ量についてはロードバランサーキャパシティーユニット(LCU)という単位で課金されます。まとめ
