Red5Pro Server AutoScaling (AWS版) |
株式会社サムライズ |
改訂履歴
版数 |
日付 |
内容 |
1.0 |
2018/12/12 |
初版 |
1.1.2. Red5Pro Serverのバージョンについて
3.3.5. MySQLに接続しclasterスキーマを追加する
3.5.5. Red5Pro Serverモジュールのリネーム
※ パラメータ「StreamManagerのインスタンスID」
3.7.11. AWS Cloud Controllerの配置と有効化
3.9.4 設定セクション:AWS CLOUD CONTROLLER
3.9.9 設定ファイルの例(red5-web.properties)
3.10.2 起動設定(Launch Configuration)
API:Create Launch Configuration
3.15. StreamManager pub/subサンプルによる動作確認
3.15.1 配信サンプルアプリ(publisher)の確認
3.15.2 視聴サンプルアプリ(subscriber)の確認
3.15.3 スケールアウトされたedgeインスンタンスの確認
本稿はInfrared5( http://www.infrared5.com/ )が提供する製品Red5Proののストリーミングサーバ(Red5Pro Server)を利用したAutoScaling環境を構築するチュートリアルを記載したものです。
Red5Pro Serverは動画ストリーミングサーバであり、自身のプラットフォームにて独自の環境を構築して、拡張性のあるライブストリーミングを配信、受信することができます。
本稿は、AWSを利用したAutoScaling環境を構築する流れを解説していきます。
導入前に、必ず本セクションの「前提条件と注意事項」「 事前準備」を予めご確認頂きますようお願い致します。
システムの概要について、本家オンラインドキュメントの関連リンク先を以下に示します。
<関連リンク先>
内容 |
URL |
Red5Pro概要 |
|
Red5Pro AutoScaling |
|
Red5 Pro StreamManager API |
https://red5pro.com/docs/autoscale/streammanagerapi.html#red5-pro-stream-manager-rest-api-v30 |
Red5Pro AutoScaling on Amazon Web Services |
本稿における前提条件、および注意事項をご説明します。
AutoScaleおよびクラスタ構成のご利用には、対応するライセンスのご購入が必要となります。本チュートリアルを実施の際は、以下のライセンスをご確認の上、実施下さいますようお願い致します。
● GROWTH PRO
● ENTERPRISE PRO
<ご利用可能なライセンス一覧>
種類 |
クラスタ構成 |
オートスケール |
30日トライアル |
× |
× |
DEVELOPER PRO |
× |
× |
STARTUP PRO |
× |
× |
GROWTH PRO |
○ |
○ |
ENTERPRISE PRO |
○ |
○ |
ライセンスのご購入についてご不明な点がございましたら、弊社サムライズ担当までご連絡下さい。
● ttakashima@samuraiz.co.jp(担当:高島)
本チュートリアルは、Red5ProServerのバージョン5.3.0を利用し検証を行っております。バージョンが異なる場合、動作保証致しかねますことをご了承下さい。
本稿は、開発者およびインフラ設計者を対象としており、以下の関する基本的な知識を有することを前提としております。一般的な利用方法および技術的解説は行いませんのでご了承ください。
● AWS
○ EC2
○ VPC
○ RDS
● Linux
○ 基本的な管理スキル
また、Red5Pro AutoScaling構成は、EC2インスタンスを動的に多数構築する為、 設定によっては多額のAWS利用料が発生することにご注意下さい。
本稿は、チュートリアルであることを前提にインスタンススペックおよびストレージは必要最低限の容量で構築しています。
環境の構築には以下のモジュールが必要となります。
● Red5Pro Server モジュール
○ red5pro-server-us-xxxxxxxxx.zip
● AWS制御ライブラリ
○ aws-cloud-controller-x.x.x.jar
● ライセンスキー(GROWTH PROおよびENTERPRISE PRO)
○ LICENSE.KEY
● ドメイン購入
○ 任意のドメイン
これらは弊社サムライズ担当よりご案内致します。製品ご購入後、受領されていない場合は以下のメールアドレスへご連絡下さい。
● ttakashima@samuraiz.co.jp (担当:高島)
※ ご案内致しました以下のモジュールが、お使いの作業環境のディレクトリ 「$HOME/Downloads」 に保存されていることを前提として解説を致します。
● Red5Pro Enterprise Proモジュール
○ 「red5-pro-us-xxx.zip」
● AWS制御ライブラリ
○ 「aws-cloud-controller-x.x.x.jar 」
※ ドメインは、本チュートリアルの動作確認に必要なSSL化を行うために利用します。本チュートリアルで推奨するブラウザ(Google Chrome)は、仕様上、カメラ・マイクの利用にそのサイトがセキュアである事(httpsあるいはlocalhost)であることを強制します。ドメインの購入先は任意です。手続きに関する解説は致しません。ご了承下さい。
※ 本チュートリアルで利用するドメインは「autoscaling.samuraz.work」と仮定しています。
本チュートリアルではAWS EC2インスタンス上にRed5Proサーバを構築する手順を解説致します。
したがって、AWSアカウントが必要となります。アカウントを所持していない場合は、以下のリンクより事前に作成を行って下さい。
本チュートリアルの作業環境は以下で検証、解説しています。
MacOSによる操作を前提としています。
推奨するバージョンを以下とします。
● macOS
○ High Sierra 10.13.5以上
また利用するターミナルは以下を推奨します。本チュートリアルでは標準ターミナルを前提に解説しています。
● 標準ターミナル
● iTerm
※ シェル環境は「bash」を前提に解説しています。zsh, fishなどをご利用の方は各環境に合わせて設定下さい。
本稿における推奨ブラウザは以下になります。
● Google Chorme 68.0.3440.106(Official Build)64 ビット
※ 2018/08 現在の最新バージョンです。
※ 以降「ブラウザ」と表記しているものは、上記を対象とします。
本チュートリアルでは、Red5Pro Serverが提供するAPIを実行し、AutoScalingの設定を行います。
APIのHTTPリクエストの送信には、以下のAPIクライアントツールを推奨します。
● Postman( https://www.getpostman.com/ )
事前にお使いの作業環境へのインストール( https://www.getpostman.com/apps )をお願いします。
Red5Proは、ストリーミングサーバをクラスタ構成に展開する機能を有しており、無制限にスケーリングが可能なライブストリーミングアプリケーションを構築することができます。
本セクションでは、Red5ProにおけるAutoScalingの概念を中心に解説していきます。
Red5Pro AutoScalingアーキテクチャの理解を進めるためには、まずRed5Proのクラスタ構成における「 概念」の認識が必要です。次にその概念について解説していきます。
ノードとは、インフラ構成上の単一のサーバインスタンスを指す概念(AWSではEC2インスタンスと捉えて下さい)です。ノードは、特定のインスタンスの役割(エッジ(Edge)、オリジン(Origin))を割り当てられた ノードグループ(NodeGroup)に属している場合があります。
ノードのライフサイクルは、ノードが属するノードグループに結び付けられます。ノードグループが削除されると、そのノードグループに属する各ノードも削除されます。
※ ノードとノードグループの結び付けは「 Launch Configuration 」を使用して定義し構成されます。詳細は後述します。
前述したように、ノードには次の役割があります。
エッジは視聴側の要求を受け付けます。エッジは、ストリーミングを行うために少なくとも1つのオリジンと関連を持つように構成されます。(親:オリジン、子:エッジ)
また複数のオリジンと通信するように設定することも可能です。
オリジンは発信元の要求を受け付けます。 視聴側も受け付けるように設定することも可能です。
ノードグループは、単一または複数のサーバインスンタンスを仮想的なグループに分類する概念です。各ノードグループは「グループID」または「名称」を使用して一意に識別されます。
ノードグループは、単一または複数のオリジン、エッジをノードグループに含めることができます。
Red5 Pro Serverは、リアルタイムでライブストリーム情報を収集し負荷に応じて他のRed5Pro Serverインスタンスを管理し、スケールアウトまたはスケールインを制御するサーバアプリケーション「 StreamManager」を提供します。これはAutoScalingを実現する中核の機能となります。
StreamManagerは、ストリーミング構成を管理しサーバーインスタンスの作成および削除のプロセスを自動化します。StreamManagerは配信側と視聴側との調整も行い、それぞれの配信側と視聴側の動作に適したサーバの連係を支援します。
ストリーム配信が開始されると、StreamManagerは各ストリーミング中のサーバから単純なREST API( Red5CloudWatch )の呼出しを受けます。このAPIを通じ、ストリーミングサーバの情報を得る事で全体の正確なストリーム量の統計をとることができます。
詳細には、サブコンポーネントである「Autoscaler 」が自動トラフィック管理を提供します。時間が経過する中、トラフィックの増減に対して自動的にスケールアウト/スケールインの指示を出します。これにより不要なサーバインスタンスの使用が削減され、クラウドプラットフォームのコストが削減されます。
まとめると、StreamManagerは以下のようなAutoScalingを実現するサブコンポーネントを有したアプリケーションです。
● クラウドプラットフォームのインスタンス展開
● ノードの管理
● ノードグループの管理
● ノードのトラフィック監視
● ストリーム要求に対する適切なノードエンドポイントへの配信側と視聴側の調整
概要 にて登場したStreamManagerのサブコンポーネントを一部紹介します。
StreamManagerに組み込まれたソフトウェアモジュールであり、リアルタイムのノード管理を可能とします。ストリーミングサーバの負荷条件に基づいて、自動的にノードグループからノード(エッジとオリジン)をリアルタイムで追加または削除します。
アクティブなノードとStreamManager間の情報を受渡しを行うREST APIとして機能します。
技術的には、ノードから得た情報をサブコンポーネント「 Red5CloudWatchClient」に中継するJavaサーブレットです。
Red5CloudWatchは、次のような重要な情報の通知を中継します。
● クラスタレポート:ノードグループ負荷統計情報
● ストリーム配信通知
● ストリーム未発行通知
● ノードの役割を割り当てる通知
Red5CloudWatch から中継される情報を基に、通知の処理を担当するサブコンポーネントです。
アラーム条件を処理して、ノードグループごとに適切な通知をAutoSaler に送信します。
LaunchConfigurationは、StreamManagerがAWS上でどのようにインスタンスを起動するかを定義する設定です。LaunchConfigurationの定義情報はREST APIを利用し、StreamManagerが動作するサーバのローカルファイルシステム上にJSONファイルとして保存されます。
LaunchConfigurationは、AWSのAMIイメージ名、使用するマシンの種類、インスタンスの推定接続容量などの重要なパラメータのセットを定義します。
ScalePolicyは、ノードグループをスケーリングするための単純なルールを定義します。一般にスケールインと スケールアウト という2種類の動作があります。ScalePolicyは、グループをスケールイン/スケールアウトする方法を指定します。ScalePolicyの定義情報はREST APIを利用し、StreamManagerが動作するサーバのローカルファイルシステム上にJSONファイルとして保存されます。
本セクションでは、AutoScalingの概要を中心に解説していきます。
StreamManagerは、Red5CloudWatchサーブレットを通じて各ノードグループの負荷統計情報を受信します。 統計情報はノードグループのノード(オリジン)によって提供されます。
AutoScalerは、ノードグループをスケーリングするためのルールを記述するScalePolicyを使用します。 ScalePolicyは、ノードグループに付属または関連付けることができます。各ノードグループは、異なる規模の方針を用いることができます。
特定のノード(オリジン/エッジ)の総負荷が過負荷状態に近づき、兄弟ノードが若干不足している場合、ノードグループに自動的に新しいインスタンスを追加します。AutoScalerはノードグループのScalePolicyを使用して、規模を変更する方法を決定します。
またノードグループからノードを削除するAutoScalerは、既存のサーバインスタンスをノードグループから削除します。AutoScalerは、ノードグループに設定されたScalePolicyを使用してノードの規模を決定します。
一般的にAutoScalingのライフサイクルは、上図のような スケールアウト(ScaleOut) とスケールイン(ScaleIn)の2種類の操作で構成されます。
ノードグループに新しいノードを追加する流れを想定し解説します。
① StremManagerは、Red5CloudWatchサーブレットを利用し、ノードグループの負荷状況およびストリーム統計のレポートを受信します。
② Red5CloudWatchClientは、対象ノード(エッジ/オリジン)のアラーム条件を評価します。評価によるアラームをAutoscalerに連携します。Autoscalerはそのアラームを受信し、その他の必要条件がないかチェックします。AutoScalerは条件が満たされない場合、条件が利用可能になるまでノードグループに対してAutoScalingを実行しません。条件が満たされた場合、スケールアウトを実行します。
(上図では、AWSへ新しいインスタンスを要求しています)
③ AWSはインスタンスを生成します。
④ 起動確認を行います。StreamManagerはインスタンスの状態遷移を追跡します。新しく起動されたインスタンスを追跡し、その状態がデータベース内で更新され、対象ノードグループの一部となります。
<インスタンスの状態値>
● 新しく起動されたインスタンス:(PENDING)
● インスタンスは動作していますが、Red5 Proは準備ができていません:(RUNNING)
● インスタンスの実行とRed5 Proの準備:(INSERVICE)
⑤ Autoscalerは、Launch ConfigurationやScale Policyを使用して、ノードグループの新しいノードを準備します。
(上図ではインスタンスに新しいエッジを割り当てています。)
⑥ 新しいノードの準備が完了すると、StreamManagerを呼び出します。
ノードグループからノードを削除する流れを想定し解説します。
① エッジスケールインの場合、オリジンはStreamManagerを呼び出してエッジを削除します。StreamManagerは、使用中の状態をチェックしオリジンのスケールインを助長します。アイドル中のエッジの削除を要求します。
② Autoscalerは、ノード(インスタンス)の削除を要求します。
③ StreamManagerは、削除するインスタンスを追跡し、データベース上のその状態を更新します。
④ Autoscalerは削除の確認を行います。AWSがインスタンスが適切にシャットダウンされたことを報告すると、データベースからそのレコードは削除されます。
<インスタンスの状態値>
● 削除を指示中:TERMINATING
⑤ インスタンスが削除されたことでノード(エッジ)の削除が行われました。
スケールインとスケールアウトが正常に機能させるには、インスタンスの状態を追跡する必要があります。StreamManagerは、クラウドプラットフォームのAPI(Amazon EC2 API等)を利用してインスタンスを起動し、インスタンス状態の変更を追跡します。
Red5Proが提供するAutoScalingは、各プラットフォーム別で定義された異なるインスタンス状態を提供します。 StreamManagerは、プラットフォームが提供するインスタンスの状態を共通した状態の定義に正規化します。これにより、クラウドサービスとのクロスプラットフォーム統合が可能になります。
ノードライフサイクルの状態を以下にまとめます。
● PEMDIMG:インスタンスが起動を開始しました。
● RUNNING:インスタンスは起動手順を完了しましたが、Red5ProServerは起動していません。
● INSERVICE:インスタンス上のRed5ProServerのサービスは準備完了、利用可能です。
● TERMINATING:インスタンスは終了するように指示され、現在は終了/シャットダウンしています。
● NULL:状態不明(オプション)
以下は配信側、視聴側を含むStreamManagerのストリーミングオペレーションを解説します。
① 配信側はStreamManagerにオリジンを要求します。
② StreamManagerは、ラウンドロビン方式でオリジンを取得します。
③ StreamManagerは、割り当てられたオリジンを返します。
④ 配信側は、オリジンに接続して配信を開始します。
⑤ 視聴側はStreamManagerにエッジサーバを要求します。
⑥ StreamManagerは、利用可能なエッジサーバを返します。
⑦ 視聴側は、エッジサーバに接続して視聴を開始します。
本チュートリアルを実施するには「前提条件と注意事項 」にも記載している以下の準備が必要です。事前にご確認頂きますようお願い致します。
● Red5Pro Serverの最新モジュール
● AWS制御ライブラリ「aws-cloud-controller.jar」
● Red5Pro Serverライセンス(GROWTH PROおよび、ENTERPRISE PRO)
● AWSアカウント
● 任意のドメイン
弊社からご案内したライブラリ「aws-cloud-controller.jar」は以下のディレクトリに配置されている事を前提と致します。
$HOME/Downloads |
本チュートリアルでは、構築に伴う多くのパラメータが存在します。セクションの要所で重要なパラメータについてはそれらを記録することを 強く推奨します。
AWSをはじめとするクラウドプラットフォームは、各地のリージョンにシステムを展開することで安定したストリーミングを提供することが可能です。
本チュートリアルでは、AWSリージョンを「アジアパシフィック(東京)」に限定します。
StreamManagerがAWSアカウントアクセスに必要なセキュリティ資格情報を取得します。
ブラウザにて管理ダッシュボード( https://console.aws.amazon.com/iam/home?#/home )にアクセスします。
左側のナビゲーションから、「ユーザー」をクリックし、次の画面に遷移します。
「ユーザーを追加 」をクリックし、次の画面に遷移します。
次の画面にて以下の設定を行います。
● セクション「ユーザー詳細の設定」のユーザー名に「streammanager」を入力します。
● セクション「AWSアクセスの種類を選択」のアクセスの種類の「プログラムによるアクセス」を選択します。
完了後、右下のボタン「次のステップ:アクセス権限」をクリックし、次の画面に遷移します。
次の画面にて以下の設定を行います。
セクション「アクセス許可の設定」の「既存のポリシーを直接アタッチ」を選択します。
検索テキストボックス「ポリシーのフィルタ」へ「EC2FullAccess」を入力し、
絞り込まれた一覧から「AmazonEC2FullAccess」にチェックを入れます。
完了後、「次のステップ:確認」をクリックし、次の画面に遷移します。
内容を確認したら、「ユーザの作成」をクリックし、次の画面に遷移します。
次の画面にて以下の設定を行います。
ボタン「.csvファイルをダウンロード」をクリックすると、作成した資格情報「credentials.csv」がダウンロードされます。
<credentials.csv>
User name |
Pass word |
Access key ID |
Secret access key |
Console login link |
streammanger |
XXXXXXXXXXXXXXXXXXXX |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
https://XXXXXXXXXXXX.signin.aws.amazon.com/console |
AWSアカウントを紛失した場合、AWSコンソールから再度取得することができないため、以下の情報を前述の「 credentials.csv」を保存する、あるいは以下の内容を記録することを推奨します。
<パラメータ:セキュリティ資格情報>
項目 |
値 |
User name |
streammanager |
Access key ID |
XXXXXXXXXXXXXXXXXXXX |
Secret access key |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
内容を記録したら、「閉じる」をクリックすると、IAMユーザー画面に戻ります。
作成したIAMユーザー「streammanager」を確認することができれば完了です。
キーペアは、AWS認可に利用する証明書です。
SSH2-RSAによるキーペアの生成を行います。
以下のコマンドを実行することで秘密鍵、公開鍵を作成します。作業環境からターミナルを起動し実行して下さい。
$ cd $HOME/.ssh $ ssh-keygen -t rsa Enter file in which to save the key (/Users/user/.ssh/id_rsa): red5pro Enter passphrase (empty for no passphrase): <任意のパスワード> Enter same passphrase again: <同パスワード> Your identification has been saved in red5pro. Your public key has been saved in red5pro.pub. The key fingerprint is: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxx@xxxxxx The key's randomart image is: +---[RSA 2048]----+ | =.OBB . | | . O.OB=. | | . *B.E | | . +B. o . | | o.+S. o . | | ..=. . | | = .. . . | | . oo.. . | | .ooo. | +----[SHA256]-----+ |
秘密鍵、公開鍵(本チュートリアルではred5proで作成)を作成されているかを確認します。
$ ls -la | grep "red5pro" -rw------- 1 user group 0000 8 23 09:14 red5pro -rw-r--r-- 1 user group 0000 8 23 09:14 red5pro.pub |
作成した公開鍵をインポートします。 EC2ダッシュボード を開きます。
左ナビゲーションから「ネットワーク&セキュリティ」の「キーペア」をクリックします。
「キーペアのインポート」ボタンをクリックするとインポートウィンドウが開きます。
ボタン「ファイルを選択」をクリックし、ファイルチューザから作成した公開鍵( red5pro.pub)を選択します。
選択すると以下のように読み込まれます。ボタン「インポート」をクリックし、キーペアをインポートします。
以下のようにキーペア「red5pro」が確認できれば完了です。
StreamManagerは、ホスティングされるサーバが静的IPアドレスであることが重要です。
インスタンスが再起動されると、同じパブリックIPアドレスが保持されるためです。
Elastic IPの設定を行います。 EC2ダッシュボード を開きます。
左ナビゲーションから「ネットワーク&セキュリティ」にある「Elastic IP」をクリックします。
「新しいアドレスの割り当て」をクリックします。
すると、「AWSコマンドラインインターフェイスコマンド」画面が表示されます。
プラットフォームを「Linux/Unix/OS X」選択し、CLIコマンドは以下のように設定されている事を確認して下さい。
aws ec2 allocate-address --domain "vpc" --region ap-northeast-1 |
「割り当て」をクリックしてIPアドレスを予約します。
IPが予約されると、確認ダイアログが表示されます。
移行のセクションの設定で利用する為、このIPアドレスを記録することを推奨します。
<パラメータ:Elastic IP>
項目 |
値 |
Elastic IP |
xxx.xxx.xxx.xxx |
VPCを構築します。VPCダッシュボード( https://console.aws.amazon.com/vpc/home )に移動します。
左ナビゲーションのVirtual Private Cloudから「VPCの作成」をクリックします。
「ステップ1:VPC設定を選択」にて最初の/デフォルトオプションのタブ「1個のパブリックサブネットを持つVPC」を選択し「選択」ボタンをクリックします。
「ステップ2:1個のパブリックサブネットを持つVPC」にて、次の項目を設定し「VPCの作成」をクリックします。
移行のセクションの設定で利用する為、以下の設定を記録することを推奨します。
< 1個のパブリックサブネットを持つVPC >
項目 |
値 |
IPv4 CIDR ブロック:* |
10.0.0.0/16 |
IPv6 CIDR ブロック |
IPv6 CIDR ブロックなし |
VPC 名 |
red5proautoscalingvpc |
パブリックサブネットの IPv4 CIDR:* |
10.0.0.0/24 |
アベイラビリティーゾーン:* |
ap-northeast-1a |
サブネット名: |
red5proautoscaling |
サービスエンドポイント |
デフォルト(追加の必要はありません) |
DNS ホスト名を有効化:* |
はい |
ハードウェアのテナンシー:* |
デフォルト |
以下の様に「VPCが正常に作成されました」と表示されたら完了です。
再びVPCダッシュボード( https://console.aws.amazon.com/vpc/home )に移動します。
左ナビゲーションのVirtual Private Cloudから「サブネット」をクリックします。
前セクションパラメータ「VPC構成」 のサブネット名「red5proautoscaling」を選択します。
「アクション」をクリックし、「自動割り当てIP設定の変更」を選択します。
IPv4の自動割り当てのチェックボックスを選択し、保存ボタンをクリックします。
設定を終えたサブネットを再度選択し、詳細ペインのタブ「ルートテーブル」をクリックし、送信先に「0.0.0.0/0」のエントリがあることを確認します。
以降のセクションの設定で利用する為、このルートテーブルIDを記録することを推奨します。
<パラメータ:ルートテーブルID>
項目 |
値 |
ルートテーブルID |
rtb-xxxxxxxxxxxxxxxx |
続けて「サブネットの作成」をクリックします。
作成するサブネットの設定を行ないます。設定を完了したら「作成」をクリックします。
< サブネット設定 >
項目 |
値 |
名前タグ |
red5proautoscaling-ap-northeast-1c |
VPC |
red5proautoscalingvpc (前セクションパラメータ「VPC構成」 のVPC名) |
アベイラビリティーゾーン |
指定なし |
サブネット名: |
ap-northeast-1c |
IPv4 CIDR ブロック * |
10.0.1.0/24 |
次の画面が表示されたら「閉じる」をクリックして下さい。
続けて作成したサブネットを選択します。
「アクション」をクリックし「自動割り当てIP設定の変更」を選択します。
IPv4の自動割り当てのチェックボックスを選択し、保存ボタンをクリックします。
続けて、この新しいサブネットの「ルートテーブル」タブをクリックします。タブ内に表示された「ルートテーブルの変更」をクリックします
「サブネットのプロパティを変更する 」で作成したルートテーブルIDを選択して「保存」をクリックしてください。
以下の画面が表示される事が確認できたら、サブネットの追加は以上です。
Red5Pro Server用のセキュリティグループを作成します。
重要 :StreamManagerはセキュリティグループ名を使用して、新しいノードを作成する場所を識別します。
再びVPCダッシュボード( https://console.aws.amazon.com/vpc/home )に移動します。
左ナビゲーションのセキュリティから「セキュリティグループ」をクリックします。
「セキュリティグループの作成」をクリックします。
以下の項目の設定を行い「はい、作成する」をクリックします。
< セキュリティグループの作成 >
項目 |
値 |
名前タグ |
red5proautoscaling |
グループ名 |
red5proautoscaling |
説明 |
Ports for Red5Pro Server |
VPC |
vpc-xxxxxxxxxxxxxx | red5proautoscalingvpc |
完了後、作成したセキュリティグループを選択し「インバウンドのルール」タブをクリックして、「編集」ボタンをクリックします。
「別のルールの追加」をクリックして、以下のポートを設定します。
完了後「保存」をクリックして更新を保存します。
<ポート設定>
タイプ |
プロトコル |
ポート範囲 |
ソース |
説明 |
SSH |
TCP |
22 |
0.0.0.0/0 |
SSH |
カスタムTCP |
TCP |
443 |
0.0.0.0/0 |
標準のHTTPSポート |
カスタムTCP |
TCP |
1935 |
0.0.0.0/0 |
デフォルトのRed5Pro RTMPポート |
カスタムTCP |
TCP |
8554 |
0.0.0.0/0 |
デフォルトのRTSPポート |
カスタムTCP |
TCP |
6262 |
0.0.0.0/0 |
HLSのウェブソケット |
カスタムTCP |
TCP |
8081 |
0.0.0.0/0 |
WebRTCのウェブソケット |
カスタムTCP |
TCP |
8083 |
0.0.0.0/0 |
WebRTC用のセキュアなWebソケット |
カスタムUDF |
UDP |
40000-65000 |
0.0.0.0/0 |
TURN / STUN / ICEポート範囲 |
カスタムTCP |
TCP |
5080 |
0.0.0.0/0 |
Red5Proのウェブアクセスの変更 |
※ アウトバウンドの設定について
アウトバウンドはセキュリティ上、必要以外のポートを閉じる事がセオリーですが、Red5Pro Serverの仕様上、TCPポート「443」を開く必要がございます。詳細は「 アウトバウンドの設定時の注意点」を参照下さい。
セキュリティグループの作成は以上です。
AutoScalingの状態を管理するために、データベースとしてMySQLの構築を行ないます。
ブラウザにてAWS RDSコンソール( https://console.aws.amazon.com/rds/ )にアクセスします。左ナビゲーションの「インスタンス」をクリックします。
「データベースの作成」をクリックします。
MySQLを選択し、「次へ」をクリックします。
「本番稼働用 - MySQL」を選択し「次へ」をクリックします。
ニーズに合わせてDBインスタンスを設定します。パフォーマンス要求が高いほど、課金の請求も総じて高くなることに注意してください。ストレージタイプは、磁気ディスク以外であればパフォーマンスの向上に繋がります。StreamManagerは大量のストレージ容量を必要としませんが、ユースケースによっては、それに応じてより多くの容量を割り当てることも可能です。AutoScalingの導入においてはデフォルトの設定で十分です。
以下に設定例を示します。
※ 以下は本チュートリアルを実施する上で、必要最低限のインスタンス構成となります。
< インスタンスの仕様 >
項目 |
値 |
ライセンスモデル |
General Public License |
DBエンジンのバージョン |
mysql 5.7.21 |
DBインスタンスのクラス |
db.t2.micro -- 1 vCPU, 1 GiB RAM |
マルチAZ配置 |
いいえ |
ストレージタイプ |
汎用(SSD) |
ストレージ割り当て |
20GiB |
最後に、DBインスタンス識別子とrootユーザの名称、パスワードを設定します。設定が完了したら「次へ」をクリックします。
移行のセクションの設定で利用する為、以下の設定を記録することを推奨します。
<パラメータ: DB接続定義の設定例 >
項目 |
値 |
DBインスタンス識別子 |
streammanager-db |
マスターユーザの名前 |
red5proadmin |
マスターパスワード |
red5proadmin |
パスワードの確認 |
red5proadmin |
「ネットワーク&セキュリティ」ではDBインスタンスを事前に作成したVPCへ登録します。
< ネットワーク&セキュリティ >
項目 |
値 |
Virtual Private Cloud(VPC) |
red5proautoscalingvpc(vpc-xxxxxxxxxxxxxxxx) |
サブネットグループ |
新しいDBサブネットグループを作成 |
パブリックアクセシビリティ |
はい |
アベイラビリティゾーン |
指定なし |
VPCセキュリティグループ |
新しいセキュリティグループを作成 |
データベースの設定を行ないます。
< データベースの設定 >
項目 |
値 |
データベースの名前 |
cluster |
ポート |
3306 |
DBパラメータグループ |
default.mysql5.7 |
オプショングループ |
default.mysql-5-7 |
IAM DB 認証 |
無効化 |
以降のオプションはデフォルト値とします。
※ バックアップ、監視、およびメンテナンスのオプションは、運用要件に合わせて設定する必要があります。
「データベースの作成」をクリックします。
「DBインスタンスの詳細の表示」をクリックします。これで、作成中のDBインスタンスが表示されるはずです。初期化プロセスが完了するまで数分かかることがあります。
ステータスが「作成中」から「利用可能」に変更されたら、データベースインスタンスのリンクを選択して下さい。
セクション「接続」のエンドポイントを記録することを推奨します。
StreamManager の設定ファイル「red5-web.properties」の項目「config.dbHost変数」に使用されます。
<パラメータ:RDSインスタンス、エンドポイント>
項目 |
値 |
エンドポイント |
streammanager-db.cimj5izddqkj.ap-northeast-1.rds.amazonaws.com |
「セキュリティグループのルール」(エンドポイントの下に配置されている)にてセキュリティグループのタイプがインバウンドのリンクをクリックします。
セキュリティグループへのStreamManagerのアクセス?設定を行います。
セキュリティグループを選択し「アクション」=>「インバウンドルールの編集」をクリックします。
ダイアログ「インバウンドのルールの編集」にて「ルールの追加」をクリックします。
以下のルールを作成します。
<ルールの追加>
項目 |
値 |
タイプ |
MySql / Aurora |
プロトコル |
TCP |
ポート範囲 |
3306 |
ソース |
「カスタム」を選択。CIDRとともにElastic IP( Elastic(Static)IPの予約 で作成したIPアドレス)を入力。例:xxx.xxx.xxx.xxx/32 |
説明 |
任意の説明を入力 |
またAutoScalingのデータベーススキーマを作成する為に、デスクトップからMySQLに接続できるようにするよう設定が必要です。再度「ルールの追加」をクリックし、以下のルールを適用して下さい。
<ルールの追加:クライアント接続用>
項目 |
値 |
タイプ |
MySql / Aurora |
プロトコル |
TCP |
ポート範囲 |
3306 |
ソース |
ソースにて「マイ IP」を選択。自動的にCIDRが設定されます。 |
説明 |
任意の説明を入力 |
[保存]をクリックして、このセキュリティグループの変更を適用します。
さらにStreamManagerのプライベートIPアドレスをセキュリティグループに追加する必要があります。
プライベートIPは、StreamManagerインスタンスがElastic IPに関連付けられた後に割り当てられる為、StreamManagerインスタンス構築後に設定します。
現時点での作業はこれで以上です。
さらに、StreamManagerのプライベートIPアドレスをセキュリティグループに追加する 必要があります。これは、StreamManagerインスタンスが予約済みのIPアドレスに関連付けられた後に割り当てられます。(インスタンス作成後に設定する)
構築したMySQLインスタンスに接続し、スキーマを作成します。
作業する際に利用するツールとして、フリーウェアの「MySQL Workbench」を推奨します。
(本ツールはあくまで任意です。お使い慣れたソフトウェアをご利用下さい)
MySQL Workbench( https://dev.mysql.com/downloads/workbench/ )
MySQL Workbenchを起動し、MySQL Connectionsの"+"アイコンをクリックします。
Setup New Connectionで、以下の接続設定を行います。
<DB接続定義>
項目 |
値 |
Connection Name |
aws-mysql |
Connection Method |
Standard(TCP/IP) |
Hostname |
streammanager-db.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com |
Username |
red5proadmin |
Password |
red5proadmin |
Default Schema |
cluster |
設定を完了後、「Test Connection」をクリックして下さい。以下の様なダイアログが表示されたら接続成功です。
※ 接続が失敗した場合は、RDSセキュリティポリシーを再度確認して下さい。
OKをクリックし完了します。
接続が完了したデータベースのclusterスキーマにDDLを実行します。
DDLはRed5Pro Serverモジュールに同梱されています。
モジュールを解凍しDDLを取得します。ご利用の作業環境からターミナルを起動し、以下のコマンドを実行して下さい。
$ cd $HOME/Downloads $ unzip red5pro-server-us-xxx.zip $ cd red5pro-server-5.x.x.bxxx-r elease/webapps/streammanager/WEB-INF/sql $ ls -la cluster.sql -rwxr-xr-x@ 1 yoshida staff 18844 7 14 08:31 cluster.sql* |
「cluster.sql」をエディタで開き、DDLをコピーします。
MySQL Workbenchから作成した接続定義からDBに接続します。
エディタが起動します。コピーしたDDLをペーストします。
上部メニューにある「実行アイコン」をクリックします。
左ペインの「SCHEMAS」の「cluster」にテーブルが作成された事を確認して下さい。
以上で、StreamManager用のデータベース構築は完了です。
本セクションでは、AWSインスタンスの構築手順について説明します。
以下のURLより、AWSコンソールにログインして下さい。
ログイン後、画面「AWS サービス」に遷移したら「EC2」ダッシュボードをクリックして下さい。
「インスタンスの作成」をクリックし、EC2インスタンスを作成します。
Amazon マシンイメージ(AMI)を指定します。「Ubuntu Server 16.04 LTS (HVM), SSD Volume Type」を選択します。
AMIのインスタンスタイプを指定します。インスタンスタイプは利用用途に合ったサーバスペックを選択してください。本チュートリアルでは、最低限必要なスペック「t2.medium」※①を選択しています。選択後「 次の手順: インスタンスの詳細の設定」※②をクリックします。
インスタンスの詳細設定を行います。以下の項目のみ変更が必要です。
その他の項目についてはデフォルトの設定とします。
※ 検証利用の際は「T2/T3 Unlimited」の「有効化」からチェックを外して下さい。
設定が完了したら「次の手順: ストレージの追加」をクリックします。
<インスタンスの詳細の設定>
項目 |
値 |
ネットワーク |
オートスケーリング用に作成したVPCを選択します。 vpc-xxxxxxxx | red5proautoscalingvpc |
自動割り当てパブリックIP |
有効化 |
インスタンスのストレージタイプ、サイズの設定を行います。用途に合ったストレージの容量を設定して下さい。本チュートリアルではOSを含む最低限の容量 「 8GB」※① を確保しています。VoDなど配信用動画ファイルを直接サーバ上に配置する運用の場合、それに見合うストレージ容量を準備する必要があります。設定後、「 次の手順: タグの追加」※②をクリックします。
タグを設定します。タグはAWS リソースを目的、所有者、環境などを「キー」と「値」で分類することができます。本稿ではタグを使用しないため、デフォルトの設定のまま「 次の手順: セキュリティグループの設定」をクリックします。
セキュリティグループの設定を行います。事前に作成済みのセキュリティグループ「red5proautoscaling」を選択します。設定を完了したら「 確認と作成」をクリックします。
<セキュリティグループの設定>
項目 |
値 |
セキュリティグループの割り当て |
既存のセキュリティグループを選択する |
名前 |
red5proautoscaling |
「インスタンス作成の確認」で設定内容を確認し「作成」をクリックします。
インスタンスの作成情報を確認します。確認し、問題がなければ「作成」をクリックします。
最後に表示されるダイアログ「既存のキーペアを選択するか、新しいキーペアを作成します。」では、「既存のキーペアの選択」を選択し、事前に作成した公開キー「red5pro」を選択します。
設定を完了したら、チェックボックス「選択したプライベートキーファイル (red5pro.pem) へのアクセス権があり、このファイルなしではインスタンスにログインできないことを認識しています。」にチェックを入れ「インスタンスの作成」をクリックします。
以下の画面が表示されたらインスタンスの作成は完了です。
(インスタンスの作成完了まで多少の時間が掛かります)
本セクションではRed5Pro Serverのインストール手順について説明します。
引き続き、前セクションで構築したサーバへの作業となります。
作成したAWSインスタンスへログインします。「キーペアの設定 」で作成したキー「$HOME/.ssh/red5pro」を利用します。セキュリティ上の考慮から、このキーの権限を「 所有者以外は読み取りを不可能」とします。
作業環境のターミナルから以下のコマンドを実行して下さい。
$ cd $HOME/.ssh $ sudo chmod 600 red5pro $ ls -la red5pro |
実行後「red5pro」の権限が以下のように変更されたことを確認して下さい。
-rw------- 1 user xxxx 1月 1 0:00 red5pro |
変更が確認できたら、以下のコマンドを実行しサーバにログインして下さい。
$ ssh -i red5pro ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com |
以下のメッセージが表示されたらログインは成功です。
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-1065-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. ... ubuntu@ip-xxx:~$ |
一度、ログアウトします。
ubuntu@ip-xxx:~$ exit |
Enterprise Proモジュールに含まれるRed5Pro Serverモジュール「red5pro-server-us-xxx.zip」をサーバへコピーします。ご利用の作業環境からターミナルを起動し、以下のコマンドを実行して下さい。
$ cd $HOME/Downloads $ scp -i $HOME/.ssh/red5pro red5pro-server-us-xxx.zip ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:/tmp/ |
実行後、サーバ側にモジュールが配置されたことを確認します。
$ ssh -i red5pro ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com ubuntu@ip-xxx:~$ cd /tmp/ |
以下のファイルが存在することを確認して下さい。
ubuntu@ip-xxx:/tmp$ ls -la | grep "red5pro-server-us*" -rw-r--r-- 1 ubuntu ubuntu 77020748 Sep 16 00:00 red5pro-server-us-xxx.zip |
Red5Pro Serverの.zipファイルを解凍する「unzip」コマンドや、動作の為のJava(推奨バージョン8以上)をインストールする必要があります。また、WebRTCのサポートにはいくつかのネイティブライブラリが必要であり、Red5Pro Serverをサービスとして実行する為には「jsvc」が必要です。
以下のコマンドを実行し、必要なライブラリを導入します。
ubuntu@ip-xxx:/tmp$ sudo apt update ubuntu@ip-xxx:/tmp$ sudo apt install -y default-jre unzip libva1 libva-drm1 libva-x11-1 libvdpau1 jsvc |
※ Ubuntuのバージョンによっては、上記のライブラリは既にインストールされている可能性があります。
以下にRed5Pro Serverが利用するポートを示します。
ファイアーウォールなどを利用する際は、以下のポートが開かれているかの確認が必要です。
Red5Pro Serverが利用するポート
ポート番号 |
説明 |
22 |
SSH |
5080 |
Red5ProのデフォルトWebアクセス |
1935 |
デフォルトのRed5Pro RTMPポート |
8554 |
デフォルトのRTSPポート |
6262 |
websockets(2番目の画面とHLS用) |
8088 |
第2画面クライアントレジストリ |
SSLを利用するWebRTCサーバーに必要なポート
ポート番号 |
説明 |
プロトコル |
22 |
SSH |
TCP |
5080 |
Red5Proのウェブアクセスの変更(またはポート80への変更) |
TCP |
443 |
標準のHTTPSポート |
TCP |
1935 |
デフォルトのRed5Pro RTMPポート |
TCP |
8554 |
デフォルトのRTSPポート |
TCP |
6262 |
HLSのウェブソケット |
TCP |
8081 |
WebRTCのウェブソケット |
TCP |
8083 |
WebRTC用のセキュアなWebソケット |
TCP |
40000-65000 |
TURN / STUN / ICEポート範囲 |
UDP |
Red5Pro Serverモジュールをディレクトリ(/usr/local/)にコピーします。
ubuntu@ip-xxx:/tmp$ sudo cp red5pro-server-us-xxx.zip /usr/local/ |
コピー後、インスタンスを実行するディレクトリ(/usr/local/)に移動し、Red5Pro Serverの.zipファイルを解凍します。
ubuntu@ip-xxx:/tmp$ cd /usr/local/ ubuntu@ip-xxx:/usr/local$ sudo unzip red5pro-server-us-xxx.zip ubuntu@ip-xxx:/usr/local$ ls -la | grep "red5pro*" |
実行後、以下のファイルが出力されることを確認して下さい。
drwxr-xr-x 1 root root xxxx Jan 1 0:00 red5pro-server-5.x.x.bxxx-release -rw-r--r-- 1 root root xxxx Jan 1 0:00 red5pro-server-us-xxx.zip |
※ Red5Pro Serverは有効なライセンスキーが無ければ機能しません。解凍したディレクトリ「 red5pro-server-5.x.x.bxxx-release 」直下に、「LICENSE.KEY」が存在することを確認してください。もし存在しない場合は、自身のライセンスキーを記載したファイルを「LICENSE.KEY」という命名で作成してください。
使いやすさを考慮して、ディレクトリ「red5pro-server-5.x.x.bxxx-release」の名前を「red5pro」に変更します。
ubuntu@ip-xxx:/usr/local$ sudo mv red5pro-server-5.x.x.bxxx-release red5pro ubuntu@ip-xxx:/usr/local$ ls -la | grep "red5pro*" |
変更後、リネームされた以下のファイルが出力されることを確認して下さい。
drwxr-xr-x 1 root root xxxx Jan 1 0:00 red5pro -rw-r--r-- 1 root root xxxx Jan 1 0:00 red5pro-server-us-xxx.zip |
Red5Pro Serverの起動、停止ファイルに実行権限を与えます。これらのファイルはディレクトリ「red5pro」に格納されています。
以下のコマンドは、その対象のファイルを絞り込み、表示しています。
ubuntu@ip-xxx:/usr/local$ cd red5pro ubuntu@ip-xxx:/usr/local/red5pro$ ls -la red5*.sh -rw-r--r-- 1 root root xxxx Jan 1 0:00 red5-debug.sh -rw-r--r-- 1 root root xxxx Jan 1 0:00 red5.sh -rw-r--r-- 1 root root xxxx Jan 1 0:00 red5-shutdown.sh |
実行権限を追加します。以下のコマンドを実行します。
ubuntu@ip-xxx:/usr/local/red5pro$ sudo chmod +x *.sh ubuntu@ip-xxx:/usr/local/red5pro$ ls -la red5*.sh |
完了後、以下のファイルに実行権限「x」が付与されたことを確認して下さい。
-rwxr-xr-x 1 root root xxxx Jan 1 0:00 red5-debug.sh -rwxr-xr-x 1 root root xxxx Jan 1 0:00 red5.sh -rwxr-xr-x 1 root root xxxx Jan 1 0:00 red5-shutdown.sh |
本セクションでは、Red5Pro Serverのプロセスをサービスとして定義します。これにより起動、停止を容易になり、サーバインスタンス起動と同時にサービスを開始することもできます。
/lib/systemd/systemディレクトリにファイル「red5pro.service」を作成します。
ubuntu@ip-xxx:/usr/local/red5pro$ sudo touch /lib/systemd/system/red5pro.service ubuntu@ip-xxx:/usr/local/red5pro$ cd /lib/systemd/system/ ubuntu@ip-xxx:/lib/systemd/system$ ls -la red5pro* |
以下のファイルが出力されることを確認して下さい。
-rw-r--r-- 1 root root xxxx Jan 1 0:00 red5pro.service |
確認できたら、「red5pro.service」を以下のように編集します。
red5pro.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
[Unit] Description=Red5Pro After=syslog.target network.target [Service] Type=forking Environment=PID=/var/run/red5pro.pid Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 Environment=RED5_HOME=/usr/local/red5pro LimitNOFILE=65536 WorkingDirectory=/usr/local/red5pro ExecStart=/usr/bin/jsvc -debug \ -home ${JAVA_HOME} \ -cwd ${RED5_HOME} \ -cp ${RED5_HOME}/commons-daemon-1.0.15.jar:${RED5_HOME}/red5-service.jar:${RED5_HOME}/conf \ -Dred5.root=${RED5_HOME} \ -Djava.library.path=${RED5_HOME}/lib/amd64-Linux-gpp/jni \ -Djava.security.debug=failure -Djava.security.egd=file:/dev/./urandom \ -Dcatalina.home=${RED5_HOME} -Dcatalina.useNaming=true \ -Dorg.terracotta.quartz.skipUpdateCheck=true \ -Xms2g -Xmx2g -Xverify:none \ -XX:+TieredCompilation -XX:+UseBiasedLocking \ -XX:MaxMetaspaceSize=128m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC \ -XX:InitialCodeCacheSize=8m -XX:ReservedCodeCacheSize=32m \ -XX:CMSInitiatingOccupancyFraction=60 \ -outfile ${RED5_HOME}/log/jsvc-service.log -errfile ${RED5_HOME}/log/jsvc-error.log \ -wait 60 \ -umask 011 \ -pidfile ${PID} org.red5.daemon.EngineLauncher 9999 ExecStop=/usr/bin/jsvc -stop -pidfile ${PID} org.red5.daemon.EngineLauncher 9999 [Install] WantedBy=multi-user.target |
「red5pro.service」の設定について補足します。
<行8-9>
環境変数のJAVA_HOMEをインストールパス(/usr/lib/jvm/java-8-openjdk-amd64)、RED5_HOMEを前述のシステムパス(/usr/local/red5pro)に設定しています。パスが異なる場合は、これらの変数を変更する必要があります。
8 9 |
Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 Environment=RED5_HOME=/usr/local/red5pro |
<行23>
Javaヒープのメモリの割り当てを設定しています。最大Javaヒープサイズの変更をしたい場合は、「 最大Javaヒープサイズ変更 」を参照して下さい。なお、メモリの割り当てが適切に設定されていない場合はサービスが起動しない可能性があります。
22 |
-Xms2g -Xmx2g -Xverify:none \ |
「red5pro.service」の権限を変更します。rootユーザは読み書き可能に、その他は読み取り専用にします。
ubuntu@ip-xxx:/lib/systemd/system$ sudo chmod 644 red5pro.service ubuntu@ip-xxx:/lib/systemd/system$ ls -la red5pro* |
以下のファイルが出力されることを確認して下さい。
-rw-r--r-- 1 root root xxxx Jan 1 0:00 red5pro.service |
デーモンをリロードします。
ubuntu@ip-xxx:/lib/systemd/system$ cd /usr/local/red5pro ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl daemon-reload |
「red5pro.service」を自動起動するように、以下のコマンドで設定します。
ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl enable red5pro.service |
サーバを起動します。
Red5Pro Serverは以下のコマンドにて起動できます。
ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl start red5pro |
サーバの起動に関しては以上です。
補足としてサーバの停止、状態の確認、再起動のコマンドを以下に示します。
停止
ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl stop red5pro |
状態の確認
ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl status red5pro |
再起動
ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl restart red5pro |
サーバの起動に関しては以上です。
補足としてサーバの停止、状態の確認、再起動のコマンドを以下に示します。
本セクションでは、Red5Pro Serverの動作確認を行います。ポート5080でサーバにアクセスして、Red5Pro
Serverが動作することを確認します。
ブラウザを開き、以下のURLにアクセスします。
http://ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:5080 |
以下の画面が確認できればサーバの動作確認は完了です。
本セクションでは、AutoScalingに必要な環境の構築を行います。引き続き、Red5Pro Serverのインスタンスに対し作業を継続します。
ストリームマネージャとすべてのノードが同期していることを確認するため、NTP(ネットワークタイムプロトコル)が必要です。
サーバにSSHで接続し以下のコマンドを実行して下さい。
$ ssh -i red5pro ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com ubuntu@ip-xxx:~$ sudo apt install ntp |
インストールが完了したら、サーバのタイムゾーンがUTCであることを確認します。
以下のコマンドを実行します。「Time zone」が「Etc/UTC」に設定されていることを確認して下さい。
ubuntu@ip-xxx:~$ timedatectl Local time: Sat 2018-09-22 19:34:44 UTC Universal time: Sat 2018-09-22 19:34:44 UTC RTC time: Sat 2018-09-22 19:34:43 Time zone: Etc/UTC (UTC, +0000) Network time on: yes NTP synchronized: yes RTC in local TZ: no |
AutoScalingの設定ファイルを編集します。
設定ファイルは「/usr/local/red5pro/conf/autoscale.xml」に配置されています。
ubuntu@ip-xxx:~$ cd /usr/local/red5pro/conf/ ubuntu@ip-xxx:~$ sudo vim autoscale.xml |
変更点は以下です。
● プロパティ「active」を "false"から "true"に変更します。
○ AutoScalingを有効にします。
● 0.0.0.0を以前にStreamManager用に予約した静的IP(Elastic IP)に置き換えます。
○ StreamManagerのホスティング先を指定しています。
※ Elastic IPはElastic(Static)IPの予約 にて作成した静的IPです。AWSにて設定したIPアドレスを確認して下さい。
以下の下線赤文字を例に設定して下さい。
</usr/local/red5pro/conf/autoscale.xml>
<bean name="config" class="com.red5pro.clustering.autoscale.Configuration" > <!-- Disable plugin --> <property name="active" value=" true"/> <!--StreamManager hosted uri. use the host of your StreamManager. --> <property name="cloudWatchHost" value="http:// xxx.xxx.xxx.xxx :5080/streammanager/cloudwatch"/> <!-- Value in milliseconds for interval to report back to cloudwatch. 5000 to 30000 are acceptable values. Lower is more agressive. --> <property name="reportingSpeed" value="10000"/> </bean> |
クラスタの設定ファイルを編集します。
後述するStreamManagerのred5.propertiesで使用されるパスワードを設定します。
設定ファイルは「/usr/local/red5pro/conf/cluster.xml」に配置されています。
ubuntu@ip-xxx:~$ cd /usr/local/red5pro/conf/ ubuntu@ip-xxx:~$ sudo vim cluster.xml |
変更点は以下です。
● プロパティ「password」を 「changeme」(デフォルト値)から一意なパスワードに変更します。
※ 注意
製品の現在の仕様では、クラスタパスワードに「大文字」を含めることはできません。
以下の下線赤文字を例に設定して下さい。
<cluster.xml>
<bean name="clusterConfig" class="com.red5pro.cluster.ClusterConfiguration"> <property name="origins"> <list> <!-- Add origin ips and optionally the port if its not default 1935. Uncomment origin entries--> <!-- <value>0.0.0.1</value> --> <!-- <value>0.0.0.2:1935</value> --> </list> </property> <!-- edge/origin link cluster password --> <property name="password" value=" red5pro123" /> <!-- THIS SERVER'S public ip used for round-robin at the origin server. --> <property name="publicIp" value="0.0.0.0" /> <!-- THIS SERVER'S public RTMP port.--> <property name="publicPort" value="1935" /> <!-- edges and origin can be excluded from round robin queries. --> <!-- set PrivateInstance to true to exclude this instance in round robin subscriber queries. --> <property name="privateInstance" value="false" /> <!-- For an edge, it is the interval in seconds to retry to connect to origin if the origin becomes unavailable. --> <property name="retryDuration" value="30" /> <!-- Remove clients automatically when publish stops. clients may not receive unpublish event if true. --> <property name="kickOnUnpublish" value="false" /> <!-- On demand streaming --> <property name="streamOnDemand" value="false" /> </bean> |
後のセクションで、このパスワードが必要になります。記録することを推奨します。
<パラメータ:クラスターパスワード>
項目 |
値(設定例) |
クラスターパスワード |
red5pro123 |
Red5Pro Serverのサービスを再起動します。
ubuntu@ip-xxx:~$ sudo systemctl restart red5pro |
正常に完了したら、ブラウザを開き、以下のURLにアクセスします。
http://ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:5080 |
Red5Pro Serverの動作確認 と同じようにRed5Pro Serverのトップ画面が表示されたら利用可能であることが確認できます。
確認したら、Red5Proのサービスを停止します。
ubuntu@ip-xxx:~$ sudo systemctl stop red5pro |
ここまでのインスタンスイメージをAMIにします。
AutoScalingは、AMIを基にインスタンスを複製し、スケールアップする為です。
作成されたAMIはRed5Pro Serverのノード用を初め、インスタンスのベースとなります。
EC2ダッシュボードを開きます。「x個の実行中のインスタンス」をクリックします。
インスタンスを選択し、「アクション」=>「イメージ」=>「イメージの作成」をクリックします。
ダイアログ「イメージの作成」で「イメージ名」と「イメージの説明」を入力し「イメージの作成」ボタンをクリックします。
※ その他の項目はデフォルト設定のままにしておきます。
項目 |
設定値 |
イメージ名 |
red5pro-autoscaling |
イメージの説明 |
for red5pro-autoscaling(任意) |
後のセクションで、このイメージ名が必要になります。
StreamManagerのlaunchconfigに必要です。記録することを推奨します。
<パラメータ:イメージ名>
項目 |
値(設定例) |
イメージ名 |
red5pro-autoscaling |
イメージ作成のリクエストが申請されました。作成が完了するまで多少の時間が必要です。
以上でRed5Pro ServerインスタンスへのAutoScalingの設定は以上です。
セクション「AMIイメージの作成 」で作成したAMIを基にStreamManagerの為のインスタンスを作成します。
EC2ダッシュボードを開きます。「インスタンスの作成」をクリックします。
左タブから「マイ AMI」をクリックします。
Red5Pro Serverのノード用に作成したAMIを選択します。
StreamManagerのインスタンスタイプを選択します。
本チュートリアルでは、最低限必要なスペック「t2.medium」を選択しています。選択後「 次の手順: インスタンスの詳細の設定」をクリックします。
※ プロダクション環境の場合、ネットワークパフォーマンスの高いマルチCPUインスタンスの構成(m4.largeなど)を選択することを推奨します。
インスタンスの詳細設定を行います。以下の項目のみ変更が必要です。
その他の項目についてはデフォルトの設定とします。
※ 必ず「T2/T3 Unlimited」の「有効化」からチェックを外して下さい。
<インスタンスの詳細の設定>
項目 |
値 |
ネットワーク |
vpc-xxxxxxxx | red5proautoscalingvpc |
設定が完了したら「次の手順: ストレージの追加」をクリックします。
StreamManagerインスタンスに必要なディスクサイズを設定します。
基本的にAMIと同じディスクサイズで十分です。
「次の手順:タグの追加」をクリックします。
「次の手順:セキュリティグループの設定」をクリックします。
以下のポートを持つ新しいセキュリティグループ「Red5Pro StreamManager」を作成します
項目 |
設定 |
セキュリティグループの割り当て |
新しいセキュリティグループを作成する |
セキュリティグループ名 |
Red5Pro StreamManager |
説明 |
任意(デフォルト) |
<セキュリティグループ詳細>
タイプ |
プロトコル |
ポート範囲 |
ソース |
説明 |
SSH |
TCP |
22 |
0.0.0.0/0 |
SSH |
カスタムTCP |
TCP |
5080 |
0.0.0.0/0 |
StreamManagerのデフォルトWebアクセス |
カスタムTCP |
TCP |
8083 |
0.0.0.0/0 |
セキュアなWebSocketポート、SSLプロキシを使用する場合に必要 |
カスタムTCP |
TCP |
80 |
0.0.0.0/0 |
標準のHTTPポート |
カスタムTCP |
TCP |
443 |
0.0.0.0/0 |
標準のHTTPSポート |
設定が完了したら「確認と作成」をクリックして下さい。
設定を確認して「作成」をクリックして下さい。
既存のキーペアを選択するか、新しいキーペアを作成します。
本チュートリアルでは、既存のキーペアを再利用します。
設定後「インスタンスの作成」をクリックして下さい。設定に問題がなければインスタンスの作成を開始します。作成が完了するまで少し時間が必要です。「 インスタンスの表示」をクリックして下さい。
インスタンスが作成されている事が確認できます。
構築されたEC2インスタンスの「インスタンスID」を記録することを推奨します。
Elastic IPアドレスを関連付けるために必要になります。
<パラメータ:セキュリティ資格情報>
項目 |
値 |
インスタンスID |
i-xxxxxxxxxxxxxxxx(17桁の英数字) |
EC2ダッシュボードを開きます。左側のナビゲーションの「ネットワークとセキュリティ」で、「Elastic IP」をクリックします。
パラメータ「Elastic IP」 のIPアドレスを選択し「アクション」から「アドレスの関連付け」をクリックして下さい。
リストからパラメータ「StreamManagerのインスタンスID」 をもとにインスタンスを選択します。
設定が完了したら「関連付け」をクリックします。
項目 |
値 |
インスタンス |
StreamManagerのインスタンスID |
プライベートIP |
デフォルト値 |
以上で、StreamManagerインスタンスとのIDの関連付けが完了しました。
次のセクションで、このプライベートIPが必要になります。記録することを推奨します。
<パラメータ:プライベートIP>
項目 |
値 |
プライベートIP |
10.0.1.24(※上記の例) |
StreamManagerからRDSへのアクセスを有効にする為、設定を行ないます。
(インスタンスが生成されるまでIPが払い出されない為、RDS構築時には設定できません)
ブラウザにて別タブにてAWS RDSコンソール( https://console.aws.amazon.com/rds/ )にアクセスします。左ナビゲーションの「インスタンス」をクリックします。
作成済みのDBインスタンスを選択します。
セクション「詳細」のセキュリティグループを選択します。
タブ「インバウンド」開き、編集ボタンをクリックします。
「インバウンドルールの編集」にて「ルールの追加」をクリックします。
以下に従い、ルールの追加を行います。
<ルールの追加:Stream Managerからの接続設定>
項目 |
値 |
タイプ |
MySql / Aurora |
プロトコル |
TCP |
ポート範囲 |
3306 |
ソース |
カスタム、パラメータ「プライベートIP」 |
説明 |
任意の説明を入力 |
完了したら保存ボタンをクリックします。
設定が確認できたら完了です。
Stream ManagerがAWS上のEC2 インスタンスへの制御を可能にするライブラリの配置とその有効化を行う設定を行います。
設定に変更を行う為、一時Red5Pro Serverのサービスを停止します。
ターミナルを起動し、以下のコマンドを実行しStreamManagerインスタンスへログインします。
$ ssh -i red5pro ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com |
Red5 Proサービスを停止します。
ubuntu@ip-xxx:~$ cd /usr/local/red5pro ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl stop red5pro |
次のファイルを削除します。
ubuntu@ip-xxx:/usr/local/red5pro$ sudo rm
conf/autoscale.xml ubuntu@ip-xxx:/usr/local/red5pro$ sudo rm plugins/red5pro-webrtc-plugin-<version> .jar |
一時的にサーバからログアウトします。
ubuntu@ip-xxx:/usr/local/red5pro$ exit |
事前に用意したAWS Cloud Controllerのライブラリをサーバにコピーします。
$ cd $HOME/Downloads $ scp -i red5pro aws-cloud-controller-x.x.x.jar ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:/tmp |
再度、サーバに接続し、ライブラリを所定の場所に配置します。
$ ssh -i red5pro ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com ubuntu@ip-xxx:$ cd /tmp ubuntu@ip-xxx:tmp$ sudo mv aws-cloud-controller-x.x.x.jar /usr/local/red5pro/webapps/streammanager/WEB-INF/lib/ |
ライブラリを有効化をするため、設定ファイル「applicationContext.xml」を編集します。
ubuntu@ip-xxx:tmp$ cd /usr/local/red5pro/webapps/streammanager/WEB-INF ubuntu@ip-xxx:...$ sudo vim applicationContext.xml |
※ 110行目? から始まる「AWS CONTROLLER」の「bean」要素を見つけて、以下のようにコメントアウトを外し、設定を有効化します。
(注:値を変更は必要ありません。以下の赤太文字を取り除いてください。)
<!-- AWS CONTROLLER --> |
デフォルトのコントローラをコメントアウトし無効化します。
(注:以下の赤太文字を追記ください。)
<!-- Default CONTROLLER --> --> |
以上で、StreamManagerがAWSへの制御を行えるようになりました。
本セクションではStreamManagerへHTTPSで接続、運用する設定を行います。
以下の準備が事前に整っている事を前提します。
● ドメインの購入
○ DNSサーバの設定など
ご用意頂いたドメインに、パラメータ「Elastic IP」 のIPアドレスを以下の情報に従いドメイン発行元にて割り当てて下さい。本チュートリアルではドメイン「autoscaling.samraiz.work」と仮定します。
ホスト名(ドメイン) |
DNSレコード |
TTL |
VALUE |
autoscaling.samraiz.work |
A |
3600 |
Elastic IPのIPアドレス |
ターミナルからStreamManagerに接続します。以下のコマンドを実行して下さい。
$ ssh -i red5pro ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amaz onaws.com |
ドメインに正しくのIPアドレスが割り当てられていることを確認します。
ubuntu@ip-xxx:~$ dig autoscaling.samuraiz.work |
digコマンドにて設定したElastic IPが確認できれば完了です。
本チュートリアルでは、Let's Encryptの無料SSL証明書を取得します。
Let's Encryptは、インターネットセキュリティリサーチグループ(ISRG)の無料で自動化された公開認証局です。( https://letsencrypt.org)
Let's Encryptで取得した証明書は、90日毎に更新する必要があります。
ドメインが正しく設定されていない場合(DNSサーバ、IPアドレスなどホストの名前解決ができないなど)は証明書の作成を妨げる可能性があります。
Let’s Encryptを利用した証明書発行に利用するパラメータを以下に示します。環境に合わせて値を置き換える必要があります。
項目 |
値 |
ドメイン名 |
autoscaling.samraiz.work |
パスワード |
red5pro |
メールアドレス |
autoscaling@samraiz.com |
証明書を作成するには、最初にLet’s Encryptプロジェクトリポジトリをクローンします。
ubuntu@ip-xxx:~$ git clone https://github.com/letsencrypt/letsencrypt ubuntu@ip-xxx:~$ cd letsencrypt |
自動的に環境を準備します。次のコマンドを実行します。
(合わせて使用可能なオプションを表示)
システムの依存関係がダウンロードされ、インストールされます。
ubuntu@ip-xxx:~/letsencrypt$ ./letsencrypt-auto --help . . . Installation succeeded. |
この時点でRed5ProServerが実行されている場合は、シャットダウンします。
ubuntu@ip-xxx:~/letsencrypt$ sudo systemctl stop red5pro.service |
Let's EncryptからCA署名付き証明書を取得するには以下のコマンドを実行します。
ubuntu@ip-xxx:~/letsencrypt$ ./certbot-auto certonly --standalone --email autoscaling@samraiz.com --agree-tos -d autoscaling.samraiz.work |
Let's Encryptからメールアドレスへニュース、キャンペーンなどの情報を送信したいことを促されますが、Noとします。
Requesting to rerun ./certbot-auto with root privileges... |
正常に完了した場合、次のようなメッセージが表示されます。
IMPORTANT NOTES: |
注意:Let's Encryptはポート80と443を使用して、ドメイン名がこのコマンドを実行しているサーバーのIPアドレスと関連付けられていることを検証するため、呼び出し時にそのポートの受信アクセスが有効になっていることを確認します。正常に完了しない場合は、 セキュリティグループの設定を確認して下さい。
DNSでホスト名が正しく設定されていない場合やその他の問題が発生した場合は、次のメッセージが表示されることがあります。
Failed authorization procedure. autoscaling.samraiz.work (tls-sni-01):
urn:acme:error:connection :: The server could not connect
to the client to verify the domain :: Server failure at
resolver |
キーストアを作成します。キーストアには、対応する公開鍵を持つ秘密鍵と証明書が含まれています。
Red5 Proの組込Tomcat用のキーストアを作成するには、PEM形式の証明書チェーンが必要です。 まず鍵と証明書をPKCS12形式のファイルにエクスポートします。
ubuntu@ip-xxx:~/letsencrypt$ sudo openssl pkcs12 -export \ -in /etc/letsencrypt/live/ autoscaling.samraiz.work/fullchain.pem \ |
※ コマンドが長い為、「\」による改行を入れています。
パスワードを入力するように求められたら、パスワードを入力して、本セクションを通して必要となるので記録しておいてください。
Enter Export Password:*******(red5pro) Verifying - Enter Export Password:*******( red5pro) |
※ 「Let’s Encryptのパラメータ」のパスワードです。
次にJavaキーストアを作成します。
ubuntu@ip-xxx:~/letsencrypt$ sudo keytool -importkeystore \ -alias tomcat . . . Importing keystore /etc/letsencrypt/live/adsh1y0.work/fullchain_and_key.p12 to /etc/letsencrypt/live/ autoscaling.samraiz.work/keystore.jks... |
※ コマンドが長い為、「\」による改行を入れています。
※ 警告を伴う可能性がありますが問題ありません
キーストアの作成は以上です。
次にトラストストアを作成します。信頼する証明書をエクスポートします。
ubuntu@ip-xxx:~/letsencrypt$ sudo keytool -export -alias
tomcat \ |
※ コマンドが長い為、「\」による改行を入れています。
正常に完了した場合、次のようなメッセージが表示されます。
Certificate stored in file </etc/letsencrypt/live/ autoscaling.samraiz.work/tomcat.cer> |
※ 警告を伴う可能性がありますが問題ありません
エクスポートされた証明書を取得したら、それをトラストストアにインポートします。
ubuntu@ip-xxx:~/letsencrypt$ sudo keytool -import
-trustcacerts -alias tomcat \ |
※ コマンドが長い為、「\」による改行を入れています。
正常に完了した場合、次のようなメッセージが表示されます。
Certificate was added to keystore |
最後に出力先ディレクトリ(/etc/letsencrypt/live/autoscaling.samraiz.work/)に各ファイルが出力されているかを確認します。
ubuntu@ip-xxx:~/letsencrypt$ sudo ls /etc/letsencrypt/live/autoscaling.samraiz.work cert.pem chain.pem fullchain_and_key.p12 fullchain.pem keystore.jks privkey.pem README tomcat.cer truststore.jks |
以下は、Red5Proが利用する重要なファイルです。
● keystore.jks
● truststore.jks
以上で、トラストストアの作成は完了です。
本セクションの設定は、443の標準ポートでHTTPSを処理することを前提にしています。
デフォルトでは、Red5サーバーはHTTPとHTTPSに対して5080と5443を使用するように構成されています。任意のポートを使用することもできますが、標準ポートを使用することで、HTTPS接続を行うときに際、直接ポートを指定する必要が無くなることがメリットです。
red5.propertiesファイルは、Red5 Proをインストールしたconfディレクトリにあります。
ファイルを開き、下記のようにhttps.portを変更します
(注意:デフォルトのHTTPポートを変更することもできますが、HTTPSを設定することで通常はHTTP経由でRed5 Proにアクセスする必要はありません)
ubuntu@ip-xxx:~/letsencrypt$ cd /usr/local/red5pro/conf ubuntu@ip-10-0-1-231:/usr/local/red5pro/conf$ sudo vim red5.properties |
赤色太文字 の箇所を以下のように変更、追記して下さい。
# HTTP . . # RTMPS Key and Trust store parameters rtmps.keystorepass=red5pro rtmps.keystorefile= /etc/letsencrypt/live/autoscaling.samraiz.work/keystore.jks rtmps.truststorepass=red5pro rtmps.truststorefile= /etc/letsencrypt/live/autoscaling.samraiz.work/truststore.jks . . . # WebSocket ws.host=0.0.0.0 ws.port=8081 wss.host=0.0.0.0 wss.port=8083 . . . |
上記の設定により、取得したキーストア、トラストストアの設定とHTTPS化に伴うWebRTCで利用するWebSocketの設定を行っています。
完了したらred5.propertiesファイルを保存して閉じます。
jee-container.xmlファイルは、red5.propertiesファイルと同じくconfディレクトリに配置されています。
ubuntu@ip-10-0-1-231:/usr/local/red5pro/conf$ sudo vim jee-container.xml |
赤色太文字 のようにセクション「Non-secured transports for HTTP and WS」をコメントアウトしてください。
. . . <!-- Non-secured transports for HTTP and WS --> . . . |
セクション「Secure transports for HTTPS and WSS」をコメントアウトを除去してください。
. . . <!-- Secure transports for HTTPS and WSS --> . . . |
このファイルの修正後は、以下のようになるはずです。
<?xml version="1.0" encoding="UTF-8"?> </bean> <bean id="webSocketTransport" class="org.red5.net.websocket.WebSocketTransport"> <property name="addresses"> <list> <value>${ws.host}:${ws.port}</value> </list> </property> </bean> --> <!-- Secure transports for HTTPS and WSS --> <bean id="tomcat.server" class="org.red5.server.tomcat.TomcatLoader" depends-on="context.loader" lazy-init="true"> <property name="webappFolder" value="${red5.root}/webapps" /> <property name="connectors"> <list> <bean name="httpConnector" class="org.red5.server.tomcat.TomcatConnector"> <property name="protocol" value="org.apache.coyote.http11.Http11Nio2Protocol" /> <property name="address" value="${http.host}:${http.port}" /> <property name="redirectPort" value="${https.port}" /> </bean> <bean name="httpsConnector" class="org.red5.server.tomcat.TomcatConnector"> <property name="secure" value="true" /> <property name="protocol" value="org.apache.coyote.http11.Http11Nio2Protocol" /> <property name="address" value="${http.host}:${https.port}" /> <property name="redirectPort" value="${http.port}" /> <property name="connectionProperties"> <map> <entry key="port" value="${https.port}" /> <entry key="redirectPort" value="${http.port}" /> <entry key="SSLEnabled" value="true" /> <entry key="sslProtocol" value="TLSv1.2" /> <entry key="ciphers" value="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA" /> <entry key="useServerCipherSuitesOrder" value="true" /> <entry key="keystoreFile" value="${rtmps.keystorefile}" /> <entry key="keystorePass" value="${rtmps.keystorepass}" /> <entry key="truststoreFile" value="${rtmps.truststorefile}" /> <entry key="truststorePass" value="${rtmps.truststorepass}" /> <entry key="clientAuth" value="false" /> <entry key="allowUnsafeLegacyRenegotiation" value="false" /> <entry key="maxHttpHeaderSize" value="${http.max_headers_size}"/> <entry key="maxKeepAliveRequests" value="${http.max_keep_alive_requests}"/> <entry key="keepAliveTimout" value="-1"/> <entry key="useExecutor" value="true"/> <entry key="maxThreads" value="${http.max_threads}"/> <entry key="acceptorThreadCount" value="${http.acceptor_thread_count}"/> <entry key="processorCache" value="${http.processor_cache}"/> </map> </property> </bean> </list> </property> <property name="baseHost"> <bean class="org.apache.catalina.core.StandardHost"> <property name="name" value="${http.host}" /> </bean> </property> </bean> <bean id="webSocketTransportSecure" class="org.red5.net.websocket.WebSocketTransport"> <property name="receiveBufferSize" value="4096"/> <property name="handshakeWriteTimeout" value="10000"/> <property name="latchTimeout" value="10000"/> <property name="secureConfig"> <bean id="webSocketSecureConfig" class="org.red5.net.websocket.SecureWebSocketConfiguration"> <property name="keystoreFile" value="${rtmps.keystorefile}"/> <property name="keystorePassword" value="${rtmps.keystorepass}"/> <property name="truststoreFile" value="${rtmps.truststorefile}"/> <property name="truststorePassword" value="${rtmps.truststorepass}"/> <property name="cipherSuites"> <array> <value>TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</value> <value>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</value> <value>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</value> <value>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</value> <value>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</value> <value>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</value> <value>TLS_RSA_WITH_AES_128_GCM_SHA256</value> <value>TLS_RSA_WITH_AES_128_CBC_SHA256</value> <value>TLS_RSA_WITH_AES_128_CBC_SHA</value> </array> </property> <property name="protocols"> <array> <value>TLSv1.2</value> </array> </property> </bean> </property> <property name="addresses"> <list> <value>${wss.host}:${wss.port}</value> </list> </property> </bean> </beans> |
JEEコンテナの設定は以上です。
次セクションでも引き続き、StreamManagerの設定を行いますので、Red5ProServerは停止したまま作業を進めます。
このセクションではStreamManagerの設定ファイルについて解説していきます。
StreamManagerにおける設定は、「red5-web.properties」に記載されています。
<StreamManager設定ファイル>
ファイル名 |
配置先のパス |
red5-web.properties |
{RED5PRO_HOME}/webapps/streammanager/WEB-INF/red5-web.properties |
※ 本稿ではRED5PRO_HOME=/usr/local/red5pro
設定可能な各設定は、独自のセクションに編成されています。
この設定ファイルの各セクションで、値を変更する必要があります。
ubuntu@ip-xxx:tmp$ cd /usr/local/red5pro/webapps/streammanager/WEB-INF ubuntu@ip-xxx:...$ sudo vim red5-web.properties |
## DATABASE CONFIGURATION SECTION |
StreamManagerが接続するデータベースへの接続情報を設定します。
< DATABASE CONFIGURATION SECTION>
項目 |
設定例 |
説明 |
config.dbHost |
streammanager-db.cimj5izddqkj.ap-northeast-1.rds.amazonaws.com |
RDSで作成したMySQLサーバインスタンスのDBエンドポイントURL。 パラメータ「RDSのエンドポイント」を参照。 |
config.dbUser |
red5proadmin |
データベースマスタのユーザー名。 パラメータ「RDSの接続定義」を参照 |
config.dbPass |
red5proadmin |
データベースマスタパスワード。 パラメータ「RDSの接続定義」を参照 |
ノードに対する振る舞いを設定します。
<NODE CONTROLLER CONFIGURATION SECTION>
項目 |
設定値 |
説明 |
instancecontroller.replaceDeadClusters |
true |
デフォルトはtrue、チュートリアルではtrueに設定。 この場合、応答しなくなったクラスタはすべてシャットダウンされます。 |
instancecontroller.deleteDeadGroupNodesOnCleanUp |
true |
デフォルトtrue、応答しないノードがダッシュボードから削除されます。 この値をfalseに設定すると、インスタンスは停止しますが、インスタンスは削除されません。 |
<CLUSTER CONFIGURATION INFORMATION>
項目 |
設定値 |
説明 |
cluster.password |
red5pro123 |
ディスクイメージのcluster.xmlファイルで設定したパスワードと同じに変更します。 パラメータ「クラスターパスワード」を参照。 |
コメントを解除し、次のエントリを設定する必要があります:
## AWS CLOUD CONTROLLER CONFIGURATION ## |
< AWS CLOUD CONTROLLER CONFIGURATION>
項目 |
設定値 |
説明 |
aws.defaultzone |
ap-northeast-1 |
AutoScalingのデフォルトリージョン(本チュートリアルは東京リージョン) |
aws.operationTimeoutMilliseconds |
20000 |
新しいVMを開始する推定時間。この値を変更することはお勧めしません。 |
aws.accessKey |
AKIAICUKKD3GQR4LHLSQ |
IAMアクセスキー。 パラメータ「セキュリティ資格情報」を参照。 |
aws.accessSecret |
jpsFlu1gftMR30OlB+EPMa0Dq4jzIPndBTAhdEHI |
IAMアクセスの秘密鍵。 パラメータ「セキュリティ資格情報」を参照。 |
aws.ec2KeyPairName |
red5pro |
ノードに接続するためのSSH鍵ペア名。 キーペアの生成を参照。 |
aws.ec2SecurityGroup |
red5proautoscaling |
セキュリティグループ名。 セキュリティグループの作成を参照 |
aws.faultZoneBlockMilliseconds |
3600000 |
|
aws.vpcName |
red5proautoscalingvpc |
VPCの名前。パラメータ「VPC」参照 |
aws.defaultVPC |
false |
デフォルトのVPCを使用する場合はtrue、そうでない場合はfalse。 (ここ数年で作成されたAWSアカウントには、各地域のデフォルトVPCがあり、古いアカウントでは使用できません) |
<REST SECURITY SECTION>
項目 |
設定値 |
説明 |
rest.administratorToken |
autoscaling |
streammanagerの使用を開始する前に、有効なパスワード文字列を設定する必要があります。これは、APIコマンドを実行するために使用するパスワードです。 |
<DEBUGGING CONFIGURATION SECTION>
項目 |
設定値 |
説明 |
debug.logaccess |
true |
REST API経由でログファイルへのアクセスを許可する場合はtrueに設定します。これは、クラウド上での開発中に特に役立ちます。 ログアクセスを有効にすると、SSHを使用してStreamManager REST APIを使用してログファイルをダウンロードできます。ログアクセスAPIを使用する方法の詳細については、StreamManager Rest APIを参照してください。 |
<WEBSOCKET PROXY SECTION>
項目 |
設定値 |
説明 |
proxy.enabled |
true |
Stream ManagerのSSL PROXYを有効にする場合、trueを設定します。本チュートリアルではSSL PROXYを利用した動作確認を行うため、trueを設定します。 |
以下は前述のセクションにて設定したred5-web.propertiesの全体例です。
webapp.contextPath=/streammanager webapp.virtualHosts=* ## DATABASE CONFIGURATION SECTION config.dbHost= streammanager-db.cimj5izddqkj.ap-northeast-1.rds.amazonaws.com config.dbPort=3306 config.dbUser=red5proadmin config.dbPass=red5proadmin ## NODE CONTROLLER CONFIGURATION SECTION - MILLISECONDS instancecontroller.newNodePingTimeThreshold=150000 instancecontroller.replaceDeadClusters= true instancecontroller.deleteDeadGroupNodesOnCleanUp=true instancecontroller.instanceNamePrefix=node instancecontroller.nodeGroupStateToleranceTime=180000 instancecontroller.nodeStateToleranceTime=180000 instancecontroller.cloudCleanupInterval=180000 instancecontroller.blackListCleanUpTime=600000 instancecontroller.pathMonitorInterval=30000 instancecontroller.minimumNodeFreeMemory=50 instancecontroller.recycleDeadNodes=true ## METRIC WEIGHTS FOR BEST NODE EVALUATION SECTION instanceevaluator.streams.metricweight=30 instanceevaluator.connections.metricweight=15 instanceevaluator.subscribers.metricweight=60 instanceevaluator.memory.metricweight=20 instanceevaluator.restreamer.metricweight=35 ## CLUSTER CONFIGURATION INFORMATION cluster.password=red5pro123 cluster.publicPort=1935 cluster.accessPort=5080 cluster.reportingSpeed=10000 cluster.retryDuration=30 cluster.mode=auto cluster.idleClusterPathThreshold=30000 ## LOADBALANCING CONFIGURATION streammanager.ip= ## LOCATIONAWARE CONFIGURATION location.region= location.geozone= location.strict=false ## CLOUD CONTROLLER CONFIGURATION SECTION - MILLISECONDS ## AWS CLOUD CONTROLLER CONFIGURATION ## aws.defaultzone=ap-northeast-1 aws.operationTimeoutMilliseconds=200000 aws.accessKey=AKIAICUKKD3GQR4LHLSQ aws.accessSecret= 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 aws.ec2KeyPairName=red5pro aws.ec2SecurityGroup=red5proautoscaling aws.defaultVPC=false aws.vpcName=red5proautoscalingvpc aws.faultZoneBlockMilliseconds=3600000 ## AZURE CLOUD CONTROLLER CONFIGURATION ## #az.resourceGroupName={master-resourcegroup} #az.resourceGroupRegion={master-resourcegroup-region} #az.resourceNamePrefix={resource-name-prefix} #az.clientId={azure-ad-application-id} #az.clientKey={azure-ad-application-key} #az.tenantId={azure-ad-id} #az.subscriptionId={azure-ad-subscription-id} #az.vmUsername=ubuntu #az.vmPassword={password-to-set-for-dynamic-instances} #az.defaultSubnetName=default #az.operationTimeoutMilliseconds=120000 #az.quickOperationResponse=true #az.quickResponseCheckInitialDelay=20000 #az.apiLogLevel=BASIC ## GOOGLE COMPUTE CLOUD CONTROLLER CONFIGURATION ## #compute.project={project-id} #compute.defaultzone={zone-id} #compute.defaultdisk=pd-standard #compute.operationTimeoutMilliseconds=200000 ## SIMULATED-CLOUD CONTROLLER CONFIGURATION ## #managed.regionNames={custom-region} #managed.availabilityZoneNames={custom-region-zone} #managed.operationTimeoutMilliseconds=20000 ## LIMELIGHT-CLOUD CONTROLLER CONFIGURATION ## #limelight.regionNames={region-name} #limelight.availabilityZoneNames={zone-name} #limelight.operationTimeoutMilliseconds=20000 #limelight.ipmode=true #limelight.port= #limelight.user= #limelight.pwd= ## REST SECURITY SECTION rest.administratorToken=autoscaling ## RED5PRO NODE SERVER API SECTION serverapi.port=5080 serverapi.protocol=http serverapi.version=v1 serverapi.accessToken= ## DEBUGGING CONFIGURATION SECTION debug.logaccess=true debug.logcachexpiretime=60000 ## WEBSOCKET PROXY SECTION proxy.enabled=true |
※ 初期展開後に上記の値を変更した場合は、Red5 Proサービスを再起動する必要があります。
最後にRed5Proのサービスを起動します。
ターミナルを起動し、以下のコマンドを実行しStreamManagerインスタンスへログインします。
$ ssh -i red5pro ubuntu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com |
Red5 Proサービスを起動します。
ubuntu@ip-xxx:~$ cd /usr/local/red5pro ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl start red5pro |
Red5 Proサービスが正常に起動していることを確認します。
ubuntu@ip-xxx:/usr/local/red5pro$ sudo systemctl status red5pro ● red5pro.service - Red5Pro |
StreamManagerがAPIを正常に実行するかを確認します。
StreamManagerが提供するAPI「StreamManager API v3.1」の動作確認APIをコールしてみましょう。
注意:
StreamManager APIのバージョンは将来更新される可能性がございます。
現在のバージョンをご確認する場合は、StreamManagerの「/usr/local/red5pro/webapps/streammanager/WEB-INF/web.xml」の要素「url-pattern」を参照下さい。
<web.xml>
... <url-pattern>/api/3.1 /admin/*</url-pattern> ... |
本チュートリアルでは事前にインストールを推奨した「Postman」を利用し実行します。
Postmanを起動します。
中央のバーに次のAPIエンドポイントを入力します。
http://<StreammanagerURL>:5080/streammanager/api/3.1/admin/debug/cloudcontroller?accessToken=<rest.administratorToken> |
項目 |
値 |
説明 |
HTTPメソッド |
GET |
このAPIのHTTPメソッドです。 |
StreammanagerURL |
http://ec2-54-199-225-74.ap-northeast-1.compute.amazonaws.com |
EC2のパブリックDNSを指定します。 |
port |
5080 |
red5-web.properties「serverapi.port」に設定されています。 |
API Endpoint |
/streammanager/api/3.1/admin/debug/cloudcontroller |
APIのエンドポイント。 |
Query Parameter |
accessToken=autoscaling |
red5-web.propertiesの「rest.administratorToken」に設定されています。 |
Sendボタンをクリックして実行します。
以下のレスポンスがステータス200で返却されたら、正常にStreamManagerがAPIを実行できると準備ができました。
Amazon Web Services
本セクションでは、Autoscalingの各ポリシーの設定について解説していきます。
AutoScalingをどのように行うかは、次のポリシーを計画し設定する必要があります。
● スケールポリシー
● 起動設定
作成後、ノードグループの作成、オリジンの起動と続きます。
これらの設定を行う手段は、全セクションで実行した「StreamManager API v3.1」を利用します。
したがって、オートスケールの運用は、API実行を中心に行う必要があります。(APIのバージョンは将来変更される可能性がございます)
AutoScalingの運用、計画にはAPIをコールすることが中心になるため、Postmanのような APIクライアントツールを使用し、ポリシーを設定する必要があります。
APIのエンドポイントは、StreamManagerのURLになります。APIのベースエンドポイントは以下です。
http://<StreamManagerURL>:5080/streammanager/api/3.1/xxx.. |
補足:<StreamManagerURL>のURLパターンはStreamManager IP/ホスト名を参照、portはRed5ProServerのデフォルトポートである5080になります。
Postmanは、HTTPによる多くのリクエスト操作に対応しています。以降で実行するAPIは、次のように実行することで可能になります。
Postmanを起動します。
リクエストメソッドをPOSTに設定します。
エンドポイントを入力します。
タブ「Body」から「raw」を選択
プルダウンから「JSON」を選択します。
送信するJSONを入力します。
Sendボタンをクリックして実行します。
結果は下部ペインにレスポンスのボディ、ステータスコードが確認できます。
スケールポリシーは、その名の通りインスタンスの規模、構成を決定するポリシーです。
負荷状況が発生した時にオートスケールが新しいエッジを起動する最小、最大インスタンス数などの詳細を定義します。
スケールポリシーを作成するAPIを以下に示します。
ENDPOINT:
http://<StreamManagerURL>:5080/streammanager/api/3.1/admin/configurations/ScalePolicy?accessToken=<rest.administratorToken> |
※ クエリーパラメータの「accessToken」は、前セクション「 RESTセキュリティ 」にて設定したプロパティ「rest.administratorToken」で設定した値になります。
REQUEST:
項目 |
値 |
説明 |
HTTP Method |
POST |
このAPIのHTTPメソッドです。 |
HTTP Header |
application/json |
このAPIのHTTPヘッダです。 |
送信するJSONデータ構造は以下です。
{ |
RESPONSE:
項目 |
値 |
説明 |
Failure : HTTP CODE |
400, 404 |
このAPIのエラーステータスコードです。 |
{ "errorMessage": "<error-message-string>", "timestamp": <error-timestamp> } |
RESPONSE:
項目 |
値 |
説明 |
Success : HTTP CODE |
201 |
レスポンスのHTTPステータスコードです。 |
HTTP Header |
application/json |
レスポンスのHTTPヘッダです。 |
PARAMETER:
項目 |
値 |
説明 |
accessToken |
autoscaling |
red5-web.propertiesの「rest.administratorToken」に設定されています。 |
設定例:
● オリジン
○ 最大、最小1インスタンス
○ 増分1インスタンス
● エッジ
○ 最大2、最小1インスタンス
○ 増分1インスタンス
● リレー
○ 最大、最小1インスタンス
○ 増分1インスタンス
以下の内容をAPI仕様に従い、POSTしステータスコード201が返却されれば完了です。
本ポリシーの定義を「scale1」としています。
{ |
後の設定に必要になります。記録することを推奨します。
項目 |
値 |
説明 |
name |
scale1 |
このポリシーを構成する設定の名称です。 |
詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。
https://www.red5pro.com/docs/autoscale/smapi-scalepolicy.html
各ノードタイプを含む、起動設定を定義します。
起動設定では、インスタンススペック、最大接続数などを定義します。
前セクションパラメータ「イメージ名」 で作成したAMIの名前が必要です。必要に応じて、ノードタイプ毎に異なるインスタンススペックと容量を選択できます。
ENDPOINT:
http://<StreamManagerURL>:5080/streammanager/api/3.1/admin/ configurations/launchconfig?accessToken=< rest.administratorToken> |
REQUEST:
項目 |
値 |
説明 |
HTTP Method |
POST |
このAPIのHTTPメソッドです。 |
HTTP Header |
application/json |
このAPIのHTTPヘッダです。 |
送信するJSONデータは以下です。
{ "launchconfig": { "name": "<configuration-name>", "description": "<configuration-descrption>", "image": "AMIイメージ名", "version": "0.0.3", "targets": { "target": [ { "role": "<role>", "instanceType": "<instance-type>", "connectionCapacity": "<instance-capacity>" } ] }, "properties": { "property": [] }, "metadata": { "meta": [ { "key": "<meta-name>", "value": "<meta-value>" } ] } } } |
RESPONSE:
項目 |
値 |
説明 |
Failure : HTTP CODE |
400, 404 |
このAPIのエラーステータスコードです。 |
{ "errorMessage": "<error-message-string>", "timestamp": <error-timestamp> } |
RESPONSE:
項目 |
値 |
説明 |
Success : HTTP CODE |
201 |
レスポンスのHTTPステータスコードです。 |
HTTP Header |
application/json |
レスポンスのHTTPヘッダです。 |
PARAMETER:
項目 |
値 |
説明 |
accessToken |
autoscaling |
red5-web.propertiesの「rest.administratorToken」に設定されています。 |
設定例:
● オリジン
○ t2.medium
○ 最大接続数:2000
● エッジ
○ t2.medium
○ 最大接続数:1(スケールアウトを容易にするため)
● リレー
○ t2.medium
○ 最大接続数:2000
http://<StreamManagerURL>:5080/streammanager/api/3.1/admin/ configurations/launchconfig?accessToken=autoscaling
プロパティimageには、前セクションパラメータ「イメージ名」 で作成したAMIの名前を指定しています。
以下の内容をAPI仕様に従い、POSTしステータスコード201が返却されれば完了です。
本起動設定の定義を「launch-config1」としています。
{ "launchconfig": { "name": "launch-config1", "description": "Sample Launch Config with all four nodetypes", "image": "red5pro-autoscaling", "version": "0.0.3", "targets": { "target": [ { "role": "origin", "instanceType": "t2.medium", "connectionCapacity": "2000" }, { "role": "edge", "instanceType": "t2.medium", "connectionCapacity": "1" }, { "role": "relay", "instanceType": "t2.medium", "connectionCapacity": "2000" } ] }, "properties": { "property": [] }, "metadata": { "meta": [ { "key": "environment", "value": "tutorial" } ] } } } |
後の設定に必要になります。記録することを推奨します。
項目 |
設定例 |
説明 |
name |
launch-config1 |
新しいインスタンスを起動するために使用される起動設定の名称です。通常、グループの一貫したマシン構成を意味します。 |
詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。
https://www.red5pro.com/docs/autoscale/smapi-launchconfig
前セクションにて作成した2つのポリシーを「ノードグループ」という単位で定義します。
それぞれのポリシーを一意付けるための名前は以下になります。
ENDPOINT:
http://<streammanager_URL>:5080/streammanager/api/3.1/admin/nodegroup?accessToken=<rest.administratorToken>/ |
REQUEST:
項目 |
値 |
説明 |
HTTP Method |
POST |
このAPIのHTTPメソッドです。 |
HTTP Header |
application/json |
このAPIのHTTPヘッダです。 |
RESPONSE:
項目 |
値 |
説明 |
Failure : HTTP CODE |
400, 404 |
このAPIのエラーステータスコードです。 |
{ "errorMessage": "<error-message-string>", "timestamp": <error-timestamp> } |
RESPONSE:
項目 |
値 |
説明 |
Success : HTTP CODE |
201 |
レスポンスのHTTPステータスコードです。 |
HTTP Header |
application/json |
レスポンスのHTTPヘッダです。 |
PARAMETER:
項目 |
値 |
説明 |
accessToken |
autoscaling |
red5-web.propertiesの「rest.administratorToken」に設定されています。 |
例:スケールポリシー「scale1」と起動設定「launch-config1」をノードグループとして定義
設定例:
● スケールポリシー
○ scale1
● 起動設定
○ launch-config1
送信するJSONデータは以下です。
以下の内容をAPI仕様に従い、POSTしステータスコード201が返却されれば完了です。
{ "regions": [ "ap-northeast-1" ], "launchConfig": "launch-config1", "scalePolicy": "scale1" } |
regionsは東京のみ、各作成したポリシーを設定しています。
当APIのリクエストによって返却されるレスポンスに含まれるプロパティ「name」の値に注意してください。 以降セッションで新しいOriginサーバを作成するために使用されます。
{ |
後の設定に必要になります。記録することを推奨します。
属性 |
値 |
説明 |
name |
group-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
クラスタの名称です。 |
詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。
https://www.red5pro.com/docs/autoscale/smapi-groups.html
ノードグループを作成したら、オリジンサーバを起動します。
スケールポリシーの計画 にて設定した構成に合わせインスタンスが起動します。
<cluster-name>には、パラメータ「クラスター名称」 で記録したノードグループIDを設定します。
ENDPOINT:
http://<streammanager_URL>:5080/streammanager/api/3.1/admin/nodegroup/ <cluster-name>/node/origin?accessToken=<rest.administratorToken> |
REQUEST:
項目 |
値 |
説明 |
HTTP Method |
POST |
このAPIのHTTPメソッドです。 |
RESPONSE:
項目 |
値 |
説明 |
Failure : HTTP CODE |
400, 404 |
このAPIのエラーステータスコードです。 |
{ "errorMessage": "<error-message-string>", "timestamp": <error-timestamp> } |
RESPONSE:
項目 |
値 |
説明 |
Success : HTTP CODE |
201 |
レスポンスのHTTPステータスコードです。 |
HTTP Header |
application/json |
レスポンスのHTTPヘッダです。 |
PARAMETER:
項目 |
値 |
説明 |
accessToken |
autoscaling |
red5-web.propertiesの「rest.administratorToken」に設定されています。 |
送信するJSONデータはありません。
API仕様に従い、POSTしステータスコード201が返却されれば完了です。
{ "id": 2, "name": "group-3ba698da-4024-4e78-9cfb-5ad6e3bc5af8", "originConnections": 0, "regions": [ "ap-northeast-1" ], "launchConfig": "launch-config1", "scalePolicy": "default-v3", "timestamp": 1534845876662 } |
注記: オリジンの追加の呼出は、繰り返すことができます。
許容されるオリジンの最大インスタンス数は、スケールポリシーに設定されている「origin」オブジェクトの「maxLimit」属性に依存します。スケールポリシーから「origin」が省略された場合、オリジンの最大インスタンス数のデフォルト値は1です。
詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。
https://www.red5pro.com/docs/autoscale/smapi-groups.html#launch-new-origin
StreamManagerは、任意のノード(例えばエッジ)をスケールアップする閾値(パーセンテージ)も管理しています。デフォルトのアラーム閾値は 60%に設定されています。これを変更するAPIが提供されています。
ENDPOINT:
http://<streammanager_URL>:5080/streammanager/api/3.1/admin/alarm/scaleout/default?type=edge&threshold= <threshold>?accessToken=<rest.administratorToken> |
REQUEST:
項目 |
値 |
説明 |
HTTP Method |
POST |
このAPIのHTTPメソッドです。 |
HTTP Header |
application/json |
このAPIのHTTPヘッダです。 |
PARAMETER:
項目 |
値 |
説明 |
type |
edge or origin or relay or transcoder |
各ロールに対する設定先を指定できます。 |
threshold |
60(default) |
スケールアウトの閾値 |
RESPONSE:
項目 |
値 |
説明 |
Failure : HTTP CODE |
400, 404 |
このAPIのエラーステータスコードです。 |
{ |
RESPONSE:
項目 |
値 |
説明 |
Success : HTTP CODE |
201 |
レスポンスのHTTPステータスコードです。 |
HTTP Header |
application/json |
レスポンスのHTTPヘッダです。 |
PARAMETER:
項目 |
値 |
説明 |
accessToken |
autoscaling |
red5-web.propertiesの「rest.administratorToken」に設定されています。 |
送信するJSONデータはありません。
API仕様に従い、POSTしステータスコード201が返却されれば完了です。
詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。
https://www.red5pro.com/docs/autoscale/smapi-alarms.html#set-alarm-threshold
オリジンの起動後のノードグループに設定されている各ノードの状態を確認します。
<cluster-name>には、パラメータ「クラスター名称」 で記録したノードグループIDを設定します。
ENDPOINT:
http://<streammanager_URL>:5080/streammanager/api/3.1/admin/nodegroup/ <cluster-name>/node?accessToken=<rest.administratorToken> |
REQUEST:
項目 |
値 |
説明 |
HTTP Method |
POST |
このAPIのHTTPメソッドです。 |
RESPONSE:
項目 |
値 |
説明 |
Failure : HTTP CODE |
400, 404 |
このAPIのエラーステータスコードです。 |
{ "errorMessage": "<error-message-string>", "timestamp": <error-timestamp> } |
RESPONSE:
項目 |
値 |
説明 |
Success : HTTP CODE |
201 |
レスポンスのHTTPステータスコードです。 |
HTTP Header |
application/json |
レスポンスのHTTPヘッダです。 |
PARAMETER:
項目 |
値 |
説明 |
accessToken |
autoscaling |
red5-web.propertiesの「rest.administratorToken」に設定されています。 |
送信するJSONデータはありません。
API仕様に従い、POSTしステータスコード201が返却されれば完了です。
[ { "identifier": "node-ap-northeast-1c-1542855506676", "role": "origin", "availabilityZone": "ap-northeast-1c", "address": "13.230.61.231", "hostname": "ec2-13-230-61-231.ap-northeast-1.compute.amazonaws.com", "state": "inservice", "launchConfig": "launch-config1", "capacity": 2000 }, { "identifier": "node-ap-northeast-1c-1542855582118", "role": "relay", "availabilityZone": "ap-northeast-1c", "address": "18.182.23.248", "hostname": "ec2-18-182-23-248.ap-northeast-1.compute.amazonaws.com", "state": "inservice", "launchConfig": "launch-config1", "capacity": 2000 }, { "identifier": "node-ap-northeast-1c-1542855584892", "role": "edge", "availabilityZone": "ap-northeast-1c", "address": "13.114.94.164", "hostname": "ec2-13-114-94-164.ap-northeast-1.compute.amazonaws.com", "state": "inservice", "launchConfig": "launch-config1", "capacity": 1 } ] |
注記:上記の各IPアドレスやidentiferはオリジン起動時に割り当てられる為、実行によって変化します。
起動したオリジンを含むノードグループのノード(オリジン、エッジなど)のインスタンスの情報を取得することができます。プロパティ「state」に注目して下さい。この値が「inservice」となっていれば各ノード上のRed5Proが稼働可能となったことになります。すべてのノードが「inservice」になっていることをここで確認して下さい。
Red5Proのliveウェブアプリには、proxy-publisher.htmlとproxy-subscriber.htmlという2つのサンプルアプリケーションが提供されています。これらの例では、次のクエリパラメータが使用されます。
QUERY PARAMETERS:
項目 |
説明 |
初期値 |
host |
hostname of IP |
Javascriptの「window.location.hostname」で取得できる値が設定されます。 |
protocol |
Stream Managerが提供するプロトコル(http or https) |
Javascriptの「window.location.protocol」で取得できる値が設定されます。 |
app |
サーバー上にストリームするWebアプリケーション名 |
live |
streamName |
ブロードキャストまたはサブスクライブするユニークなストリーム名(stream1など) |
なし |
verbose |
開発コンソールで詳細ログを有効にするフラグ(1が有効) |
なし |
view |
利用するブロードキャスト技術(rtc, rtmp or hls) |
なし |
ブラウザを起動し、以下のURLを実行し、ストリームマネージャの配信サンプルアプリを起動します。
https://autoscaling.samuraiz.work/live/proxy-publisher.html?streamName=stream1&verbose=1 |
※ ブラウザの右ペインはChromeのデベロッパーツールです。起動ログの詳細を確認することができます。
上記のように「Publish.Start」と表示されたら配信が開始されています。
またデベロッパツールのコンソールにて以下の情報を確認して下さい。
この配信サンプルが接続している先は、API:List Group Nodes の実行結果にて確認できたオリジン(origin)インスタンスと同じIPアドレスとなっているはずです。AutoScaleの構成に従い正常にインスタンスに接続することを確認することができました。
次にブラウザにて別タブを起動し、以下のURLを実行し、ストリームマネージャの視聴サンプルアプリを起動します。
https://autoscaling.samuraiz.work/live/proxy-subscriber.html?streamName=stream1&verbose=1 |
上記のように「Subscribe.Start」と表示されたら、わずかな遅延を伴いますが、配信中の映像を確認することができます。Chromeのデベロッパツールのコンソールにて以下の情報を確認して下さい。
この視聴サンプルが接続している先は、API:List Group Nodes の実行結果にて確認できたエッジ(edge)インスタンスと同じIPアドレスとなっているはずです。視聴側でもAutoScaleの構成に従い正常にインスタンスに接続することを確認することができました。
前セクションに引き続き、更にブラウザにて別タブを起動して視聴サンプルアプリを起動します。
https://autoscaling.samuraiz.work/live/proxy-subscriber.html?streamName=stream1&verbose=1 |
API:List Group Nodes を実行し確認すると、以下のようにedgeインスタンスが自動的に起動(スケールアウト)していることを確認することができます。これはedgeの最大接続数が1であるため、視聴側の接続に対応するためにインスタンスを起動、スケールアウトされた事が確認できます。
[ { "identifier": "node-ap-northeast-1c-1542855506676", "role": "origin", "availabilityZone": "ap-northeast-1c", "address": "13.230.61.231", "hostname": "ec2-13-230-61-231.ap-northeast-1.compute.amazonaws.com", "state": "inservice", "launchConfig": "launch-config1", "capacity": 2000 }, { "identifier": "node-ap-northeast-1c-1542855582118", "role": "relay", "availabilityZone": "ap-northeast-1c", "address": "18.182.23.248", "hostname": "ec2-18-182-23-248.ap-northeast-1.compute.amazonaws.com", "state": "inservice", "launchConfig": "launch-config1", "capacity": 2000 }, { "identifier": "node-ap-northeast-1c-1542855584892", "role": "edge", "availabilityZone": "ap-northeast-1c", "address": "13.114.94.164", "hostname": "ec2-13-114-94-164.ap-northeast-1.compute.amazonaws.com", "state": "inservice", "launchConfig": "launch-config1", "capacity": 1 } { "identifier": "node-ap-northeast-1c-1542855764892", "role": "edge", "availabilityZone": "ap-northeast-1c", "address": "18.179.23.59", "hostname": "ec2-18-179-23-59.ap-northeast-1.compute.amazonaws.com", "state": "inservice", "launchConfig": "launch-config1", "capacity": 1 } ] |
2つ目に起動した視聴サンプルアプリのChromeのデベロッパツールのコンソールにて以下の情報を確認して下さい。スケールアウトされたサーバに接続できている事が確認できました。
ノードグループを作成したにもかかわらず、Originサーバを追加してもエッジサーバが自動的に起動しない場合は、Red5Proサーバイメージのred5pro/conf/autoscale.xmlをIPアドレスを指すように変更していない可能性があります。※ 「autoscaling.xml」の設定を参照。
<0.0.0.0を置き換える>
<property name="cloudWatchHost" value="http://0.0.0.0:5080/streammanager/cloudwatch" /> |
アウトバウンドの設定時の注意点について解説します。
AWSに限らず、一般的なサーバのインバウンド、アウトバウンドは「必要なポートのみを然るべき箇所から接続可能にする、もしくは通信可能にする」というのがセオリーです。
しかしRed5Pro Serverの仕様上、アウトバウンドにはポート「443」を必ず開けるようにして下さい。
本セクションでは、アウトバウンドへポート「443」を開ける設定の手順を示します。
以下のURLより、AWSコンソールにログインして下さい。
セキュリティグループを編集します。ログイン後、画面「AWS サービス」に遷移したら「EC2」ダッシュボードをクリックして下さい。
以下の画面に遷移したら、「X個のセキュリティグループ」をクリックします。
セキュリティグループ一覧画面に遷移したら、編集するセキュリティグループ※1、「 アウトバウンド」※2の順にクリックします。
その後表示された「編集」※3をクリックし、アウトバウンドを編集します。
アウトバウンドにルールを追加していきます。まず「ルールを追加」をクリックします。
クリックすると、以下のキャプチャーに示す行が追加されます。
各項目に設定する値を以下の表に示します。
ルールの設定値
タイプ |
プロトコル |
ポート範囲 |
ソース |
説明 |
カスタムTCP |
TCP |
443 |
カスタム(0.0.0.0/0) |
標準のHTTPSポート |
設定後「保存」をクリックします。
完了後、アウトバウンドのルール一覧に設定が反映されていたら、ルールの追加は完了です。