【AWS】 ALB構成で動画配信


はじめに

動画配信基盤は要件によって、様々な構成で環境構築しています。

今回は、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

Load Balancer Types

構成図

構成のイメージは下記のようになります。

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構成をお勧めします。