トラフィックを分散させるためのAWS ALBの使用方法
目次
負荷(トラフィック)分散とはどういうことか?
インターネットを利用していて、Webページやアプリケーションが重くて読み込みが遅い、といった経験をしたことがある方も多いと思います。これは、Webサイトを構成するサーバーに対して、アクセスが集中し負荷がかかっていることが原因の場合があります。このような現象を回避するためには、負荷分散という技術を使うことが考えられます。
負荷分散の手法
負荷分散とは、インターネット上のデータの流れを効率的に制御し、Webサイトやオンラインサービスがスムーズに動作するようにする技術です。具体的な手法は下記のようなものがあります。
- CDNを利用する手法…CDN(コンテンツデリバリーネットワーク)は、世界中のさまざまな場所にサーバーを配置し、ユーザーがアクセスする際に最も近いサーバーからコンテンツを配信するシステムです。これにより、一か所のサーバーに負荷が集中することを防ぐだけでなく、データの読み込み速度が速くなり、Webサイトの表示速度が向上するなどユーザー体験が向上します。
- ロードバランサーによる手法… ロードバランサーは、通信を複数のサーバー間で分散させる装置です。具体的には、Webサーバーを2台用意し、ロードバランサーによって2台のWebサーバーに通信を分散させます。これにより、単一のサーバーに過度な負荷がかかることを防ぎ、システムの安定性を保ちます。
負荷分散の重要性
負荷分散の重要性については、下記のようなものがあります。
- パフォーマンスの向上…一般的に、Webサイトの読み込みが3秒以上かかると、40%の閲覧者がWebサイトの閲覧を取りやめるという調査報告もあります(※)。CDNやロードバランサーにより、Webサイトの読み込み速度が向上することは、ユーザーが快適にサイトを利用できるようになるだけでなく、ビジネスの機会損失を防ぐという意味もあります。
- ダウンタイムの低減…サーバーへの負荷が均等に分散されるため、サーバーの過負荷によるサーバー障害の発生確率が低減します。これにより、メンテナンスによるサービスの中断が少なくなります。
- セキュリティの強化…サイバー攻撃の中には、DDoS攻撃のように特定のサーバーに負荷をかける攻撃が存在します。負荷分散の仕組みを導入しておくことで、攻撃者が特定のサーバーをターゲットにすることが難しくなり、DDoS攻撃などの耐性が向上します。
※出典
https://www.f5.com/ja_jp/solutions/special/jp-solutions-site-speed
AWSネットワークを安心、安全に設計するスタイルズのAWSセキュリティサービスはこちら→
AWSにおけるロードバランサ
AWS(Amazon Web Services)では4種類のロードバランサーが提供されています。
- Classic Load Balancer(CLB)
- Application Load Balancer(ALB)
- Network Load Balancer(NLB)
- Gateway Load Balancer(GWLB)
これらの特徴を簡潔に説明します。
Classic Load Balancer(CLB)
CLBはAWSの初期のロードバランサーで、基本的な負荷分散機能を提供します。現在では新規に作成する場合は後続のALBやNLB(一般的にはALB)を利用するほうがいいでしょう。
Application Load Balancer(ALB)
ALBはより高度な負荷分散機能を提供し、アプリケーションレイヤー(第7層)で動作します。HTTPやHTTPSの通信に関する負荷分散に向いています。
Network Load Balancer(NLB)
NLBは第4層(トランスポート層)で動作し、TCP/UDP/TLSのトラフィック分散にも向いています。毎秒数百万のリクエストの処理が可能となっており、極めて高いパフォーマンスと低遅延を提供します。
Gateway Load Balancer(GWLB)
セキュリティ製品など、AWS上に構築した仮想アプライアンスについて、可用性を向上や負荷分散を行うためのロードバランサーです。
AWS ALBの特徴
Application Load Balancer(ALB)は、AWSのロードバランサーの中でも、Webアプリケーションなどに幅広く利用できます。特徴とユースケースは以下の通りです。
4つの特徴
- 高度な負荷分散の実現…負荷分散は「ターゲットグループ」という単位を設定して行います。ALBは複数のターゲットグループに対する条件付きルーティングをサポーしており、Webアプリケーションの様々なコンポーネント(例えば、フロントエンド、管理画面、APIエンドポイント)にトラフィックを適切に振り分けることが可能です。
- 楽に運用できる…ALB自体が高負荷になって障害が起きてしまうと、ALBの背後に配置したサーバーにアクセスできなくなり、元も子もありません。したがって、ALB自体も負荷に応じて自動的にスケーリングができるようになっています。また、AWSのマネージドサービスであるため、ALB自体のパッチ適用といったメンテナンス作業も不要です。
- セキュリティの設定が容易…ALBはVPC内に配置されるため、通信の制御はSecurity Groupにより実施することができます。これにより、EC2と同じように通信の制御が可能です。また、SSL証明書のインストールも簡単に実施することが可能なので、Webサイトにおける通信の暗号化も簡単に実施することができます。
- AWSの他のサービスと統合が簡単…ALBはAWSのサービスであるため、他のサービスとの連携が容易です。例えば、AWS WAFと連携することで、数クリックでSQLインジェクションやクロスサイトスクリプティングなどの脅威に対して対策を行うことができます。また、Amazon CloudWatchを利用することでアクセスログの取得が可能です。
ユースケース
ALBは幅広いWebアプリケーションの負荷分散に向いています。また、ターゲットグループとして設定可能なサービスはEC2だけでなく、コンテナサービスであるECSや、FaaSであるAWS Lambda、API管理を行うAPI Gatewayなども対象にすることが可能です。例えば、/apiパスへのリクエストをAPI gatewayに、その他のリクエストをウェブサーバーにルーティングする、といった設定も可能で、幅広いユースケースに対応していることが分かります。
AWSネットワークを安心、安全に設計するスタイルズのAWSセキュリティサービスはこちら→
ALBで実施するロードバランシング
では、実際にALBを導入するステップを見ていきましょう
ステップ①…事前準備
まずは、ALBを作成する前に、ALBを配置するVPCや、負荷分散先のEC2、インターネットゲートウェイがアタッチされたサブネットが作成されていることを確認してください。
ステップ②…ALBの作成
ALBはEC2コンソールから作成可能です。EC2コンソールから『ロードバランサー』を選択し、ロードバランサーの作成をクリックします。その後、作成するELBの種類の中から、ALBを選択し、任意の名前を入力してください。次に用途(インターネット向けか、否か)や配置するVPC、リスナー(HTTPなど、アクセスする想定の通信)について指定をすれば、作成がされます。
ステップ③…ALBの設定
次に、ALBの設定を行います。
ステップ④…通信の設定
許可する通信と、通信の向き先について設定を行います。許可する通信についてはセキュリティグループを作成・アタッチすることで設定が可能です。通信の向き先はターゲットグループの設定になります。ターゲットグループでは、バックエンドで動作するEC2インスタンスやコンテナと、バックエンドが正常に作動しているかを確認するヘルスチェックの設定を行います。
このようなステップで、簡単にALBを作成することが可能です。応用として、AWSの他のサービスへの連携やログの取得といった設定を要件に合わせて実施するといいでしょう。ALBには様々な機能が用意されており、十分に利活用を行いたい場合は、専業のベンダーに相談してみるのもいいでしょう。