はじめに
動画配信基盤は要件によって、様々な構成で環境構築しています。
今回は、ELBを使って配信動画ごとにインスタンスを分ける場合を考えてみます。
弊社では、下記のAWSリソースを使用して環境を構築していました。
- EC2(nginx + apache) – CLB – CloudFront
ただ、これだとEC2台数分のCLBが必要になり、手間とコストがかかってしまうデメリットがありました。
調べてみると、CLBの代わりにALBの構成が可能だと分かったので、試してみました。
おさらい
ELB(Elastic Load Balancing)には、現在3種類あり、
それぞれALB, NLB, CLBと略されています。
ロードバランサーの種類
- Application Load Balancer
- Network Load Balancer
- Classic Load Balancer
構成図
構成のイメージは下記のようになります。
ELBの数が少ない方が構築やメンテナンス時の設定変更の手間が減らせるので、
CLBからALBの構成に変更したいと考えています。
<CLB構成>
<ALB構成>
振り分け
CLBからALBへの構成変更によって、パスを振り分ける場所が変わります。
これまではCloudFrontでしたが、ALBで振り分ける形になります。
<CLB構成>
CloudFrontのBehavior設定でURLの振り分けを行い、
オリジンである各ELBに流します。(最終的にはELBにアタッチしている各EC2へ)
<ALB構成>
CloudFrontでは、共通のALB(1台)をオリジンに設定し、
Target Groupで各EC2に振り分けを行います。
Target Group
今回の場合で考えると、Target GroupはEC2の数だけ作成します。
上の構成図では大きな枠で表現していますが、
実際には、Target GroupとEC2は1対1で紐付きます。
ちなみに、Target GroupにEC2インスタンスを登録する際は、
ELBとは違って、起動中のEC2インスタンスしか画面に表示されないので注意が必要です。
ALBリスナー
下記のような経路となるように設定します。
<URL> ➡︎ <Target Group> ➡︎ <EC2>
(例)
・ </testA/*> ➡︎ <targetgroup-A> ➡︎ <EC2instance-A> ・ </testB/*> ➡︎ <targetgroup-B> ➡︎ <EC2instance-B> ・ </testC/*> ➡︎ <targetgroup-C> ➡︎ <EC2instance-C>
(※振り分けURLは例ですので、各々のパスに読み替えてください。)
※Application Load Balancerの細かな設定は、
「ALB パスベースルーティング」「ALB URL 振り分け」などで検索してみてください。
CloudFront
OriginにALB(1台)を設定します。
おわりに
元々のCLB構成の場合では、配信動画に対して1インスタンスの構成で割り当てていたため、
仮に3つの場合を想定しても、必要な設定を比較すると下記の表になります。
CLB構成 | ALB構成 | |
---|---|---|
ELB数 | 3個 | 1個 |
Target Group数 | ー | 3個 |
CF Origin登録 | 3個 | 1個 |
CF Behavior作成 | 3個 | 1個 |
ALB構成の場合だと、さらにインスタンスが増えた場合でも、
Target Groupを追加して、ALBリスナーに設定追加するだけでよいため、メンテナンスが楽になります。
ELBの使い方一つで、構成がシンプルになるので、
ELBを使った、動画配信基盤ではALB構成をお勧めします。