Red5Pro Server AutoScaling (AWS版)

株式会社サムライズ
http://www.samuraiz.co.jp/


改訂履歴

版数

日付

内容

1.0

2018/12/12

初版


~~~ 目次 ~~~~

1. はじめに

1.1. 前提条件と注意事項

1.1.1. Red5Proライセンスについて

1.1.2. Red5Pro Serverのバージョンについて

1.1.3. AWSについてのご注意

1.2. 事前準備

1.1.1. モジュールの取得

1.1.2. AWSアカウントの作成

1.3. クライアント環境

1.3.1. プラットフォーム

1.3.2. 推奨ブラウザ

1.3.3. APIクライアントツール

 

2. アーキテクチャ

2.1. 構成の概念

2.1.1. ノード(Node)

エッジ(Edge)

オリジン(Origin)

2.1.2. ノードグループ(NodeGroup)

2.2. StreamManager

2.2.1. 概要

2.2.2. サブコンポーネント

Autoscaler

Red5CloudWatch

Red5CloudWatchClient

2.2.3. Launch Configuration

2.2.4. Scale Policy

2.3. AutoScaling

2.3.1. Autoscalerの責務

2.3.2. AutoScalingのライフサイクル

2.3.3. スケールアウト(ScaleOut)

2.3.4. スケールイン(ScaleIn)

2.3.5. ノードのライフサイクル

2.3.6. ノードライフサイクルの状態

2.3.7. ストリーミングオペレーションの流れ

 

3. チュートリアル

3.1. はじめに

3.1.1. パラメータの記録

3.1.2. AWSリージョンについて

3.2. AWS環境の構築

3.2.1. セキュリティ資格情報(IAM)の取得

※ パラメータ「セキュリティ資格情報」

3.2.2. キーペアの生成

3.2.3. 公開鍵をインポートする

3.2.4. Elastic(Static)IPの予約

※ パラメータ「Elastic IP」

3.2.5. VPCの作成

※ パラメータ「VPC構成」

3.2.6. サブネットのプロパティを変更する 36

※ パラメータ「ルートテーブルID」

3.2.7. VPCにサブネットを追加する

3.2.8 セキュリティグループの作成

3.3. MySQLデータベースの構築

3.3.1  ステップ1:「エンジンの選択」

3.3.2. ステップ2:ユースケース

3.3.3. ステップ3:DB詳細の指定

※ パラメータ「RDSの接続定義」

3.3.4. ステップ4:詳細設定の設定

※ パラメータ「RDSのエンドポイント」

※ 補足 「StreamManagerからの接続対応」

3.3.5. MySQLに接続しclasterスキーマを追加する

3.4. EC2インスタンスの構築

3.4.1. AWSコンソールへのログイン

3.4.2. インスタンスの作成

3.4.3. Amazonマシンイメージ(AMI)の設定

3.4.4. インスタンスタイプの選択

3.4.5. インスタンスの詳細の設定

3.4.6. ストレージの追加

3.4.7. タグの追加

3.4.8. セキュリティグループの設定

3.4.9. インスタンス情報の確認

3.4.10. キーペアの選択

3.5. Red5Pro Serverのインストール

3.5.1. サーバへのログイン

3.5.2. モジュールのコピー

3.5.3. 必要なライブラリの追加

3.5.4. Red5Pro Serverモジュールの解凍

3.5.5. Red5Pro Serverモジュールのリネーム

3.5.6. 実行権限の追加

3.5.7. サーバプロセスのサービス化

3.5.8. 「red5pro.service」の権限変更

3.5.9. サーバの起動

3.5.10. Red5Pro Serverの動作確認

3.6. AutoScalingの設定

3.6.1. NTPのインストール

3.6.2. 「autoscaling.xml」の設定

3.6.3. クラスタパスワードの設定

※ パラメータ「クラスターパスワード」

3.6.4. 動作確認(設定の適用後)

3.6.5. AMIイメージの作成

※ パラメータ「イメージ名」

3.7. StreamManagerインスタンスの構築

3.7.1. AMIの選択

3.7.2. インスタンスタイプの選択

3.7.3. インスタンスの詳細設定

3.7.4. ストレージの追加

3.7.5. タグの追加

3.7.6. セキュリティグループの設定

3.7.7 インスタンス作成の確認

3.7.8 キーペアの選択

※ パラメータ「StreamManagerのインスタンスID」

3.7.9. Elastic IPとの関連付け

※ パラメータ「プライベートIP」

3.7.10. RDS Secrutiryグループへの追加

3.7.11. AWS Cloud Controllerの配置と有効化

3.8. StreamManagerのSSL化

3.8.1. IPアドレスの割り当て

3.8.2. Let's Encrypt

※ パラメータ「Let’s Encryptのパラメータ」

3.8.3. Let's Encryptのインストール

3.8.4. CA署名付き証明書の発行

3.8.5. キーストアの作成

3.8.6. トラストストアの作成

3.8.7. SSLの設定

3.8.8. JEEコンテナの設定

3.9. StreamManagerの各種設定

3.9.1 設定セクション:データベース構成

3.9.2 設定セクション:ノードコントローラ

3.9.3 設定セクション:クラスタ構成情報

3.9.4 設定セクション:AWS CLOUD CONTROLLER

3.9.5 設定セクション:RESTセキュリティ

3.9.6 設定セクション:デバッキング設定

3.9.8 設定セクション:WEBSOCKET PROXY

3.9.9 設定ファイルの例(red5-web.properties)

3.9.10 サービスの起動

3.9.11 StreamManagerの動作確認

3.10. Auto Scaleの指針計画

補足:PostmanによるPOSTの流れ

3.10.1. スケールポリシーの計画

API:Create Scale Policy

※ パラメータ「スケールポリシーの名称」

3.10.2 起動設定(Launch Configuration)

API:Create Launch Configuration

※ パラメータ「起動設定の名称」

3.11. ノードグループの作成

API:Create Node Group

※ パラメータ「クラスター名称」

3.12. オリジンの起動

API:Launch New Origin

3.13. アラーム閾値の設定

API:Set Alarm Threshold

3.14. ノードグループの確認

API:List Group Nodes

3.15. StreamManager pub/subサンプルによる動作確認

3.15.1 配信サンプルアプリ(publisher)の確認

3.15.2 視聴サンプルアプリ(subscriber)の確認

3.15.3 スケールアウトされたedgeインスンタンスの確認

3.16. トラブルシューティング

 

補足(Red5Pro Server)

アウトバウンドの設定時の注意点

1. AWSコンソールへのログイン

2. セキュリティグループ編集

3. アウトバウンドのルールの編集


1. はじめに

本稿はInfrared5( http://www.infrared5.com/ )が提供する製品Red5Proののストリーミングサーバ(Red5Pro Server)を利用したAutoScaling環境を構築するチュートリアルを記載したものです。

Red5Pro Serverは動画ストリーミングサーバであり、自身のプラットフォームにて独自の環境を構築して、拡張性のあるライブストリーミングを配信、受信することができます。

本稿は、AWSを利用したAutoScaling環境を構築する流れを解説していきます。

導入前に、必ず本セクションの「前提条件と注意事項」「 事前準備」を予めご確認頂きますようお願い致します。

システムの概要について、本家オンラインドキュメントの関連リンク先を以下に示します。

<関連リンク先>

内容

URL

Red5Pro概要

https://www.red5pro.com/docs/#overview

Red5Pro AutoScaling

https://www.red5pro.com/docs/autoscale/

Red5 Pro StreamManager API

https://red5pro.com/docs/autoscale/streammanagerapi.html#red5-pro-stream-manager-rest-api-v30

Red5Pro AutoScaling on Amazon Web Services

https://www.red5pro.com/docs/autoscale/autoscaleaws.html

↑目次に戻る


1.1. 前提条件と注意事項

本稿における前提条件、および注意事項をご説明します。

1.1.1. Red5Proライセンスについて

AutoScaleおよびクラスタ構成のご利用には、対応するライセンスのご購入が必要となります。本チュートリアルを実施の際は、以下のライセンスをご確認の上、実施下さいますようお願い致します。

● GROWTH PRO

● ENTERPRISE PRO

<ご利用可能なライセンス一覧>

種類

クラスタ構成

オートスケール

30日トライアル

×

×

DEVELOPER PRO

×

×

STARTUP PRO

×

×

GROWTH PRO

ENTERPRISE PRO

ライセンスのご購入についてご不明な点がございましたら、弊社サムライズ担当までご連絡下さい。

● ttakashima@samuraiz.co.jp(担当:高島)

↑目次に戻る


1.1.2. Red5Pro Serverのバージョンについて

本チュートリアルは、Red5ProServerのバージョン5.3.0を利用し検証を行っております。バージョンが異なる場合、動作保証致しかねますことをご了承下さい。

↑目次に戻る


1.1.3. AWSについてのご注意

本稿は、開発者およびインフラ設計者を対象としており、以下の関する基本的な知識を有することを前提としております。一般的な利用方法および技術的解説は行いませんのでご了承ください。

● AWS

○ EC2

○ VPC

○ RDS

● Linux

○ 基本的な管理スキル

また、Red5Pro AutoScaling構成は、EC2インスタンスを動的に多数構築する為、 設定によっては多額のAWS利用料が発生することにご注意下さい

本稿は、チュートリアルであることを前提にインスタンススペックおよびストレージは必要最低限の容量で構築しています。

↑目次に戻る


1.2. 事前準備

1.1.1. モジュールの取得

環境の構築には以下のモジュールが必要となります。

● 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」と仮定しています。

↑目次に戻る


1.1.2. AWSアカウントの作成

本チュートリアルではAWS EC2インスタンス上にRed5Proサーバを構築する手順を解説致します。

したがって、AWSアカウントが必要となります。アカウントを所持していない場合は、以下のリンクより事前に作成を行って下さい。

https://portal.aws.amazon.com/billing/signup?redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation&language=ja_jp#/start

↑目次に戻る


1.3. クライアント環境

本チュートリアルの作業環境は以下で検証、解説しています。

1.3.1. プラットフォーム

MacOSによる操作を前提としています。

推奨するバージョンを以下とします。

● macOS

○ High Sierra 10.13.5以上

また利用するターミナルは以下を推奨します。本チュートリアルでは標準ターミナルを前提に解説しています。

● 標準ターミナル

● iTerm

※ シェル環境は「bash」を前提に解説しています。zsh, fishなどをご利用の方は各環境に合わせて設定下さい。

↑目次に戻る


1.3.2. 推奨ブラウザ

本稿における推奨ブラウザは以下になります。

● Google Chorme 68.0.3440.106(Official Build)64 ビット

※ 2018/08 現在の最新バージョンです。

※ 以降「ブラウザ」と表記しているものは、上記を対象とします。

1.3.3. APIクライアントツール

↑目次に戻る


本チュートリアルでは、Red5Pro Serverが提供するAPIを実行し、AutoScalingの設定を行います。

APIのHTTPリクエストの送信には、以下のAPIクライアントツールを推奨します。

● Postman( https://www.getpostman.com/

事前にお使いの作業環境へのインストール( https://www.getpostman.com/apps )をお願いします。

↑目次に戻る


2. アーキテクチャ

Red5Proは、ストリーミングサーバをクラスタ構成に展開する機能を有しており、無制限にスケーリングが可能なライブストリーミングアプリケーションを構築することができます。

本セクションでは、Red5ProにおけるAutoScalingの概念を中心に解説していきます。

↑目次に戻る


2.1. 構成の概念

Red5Pro AutoScalingアーキテクチャの理解を進めるためには、まずRed5Proのクラスタ構成における「 概念」の認識が必要です。次にその概念について解説していきます。

↑目次に戻る


2.1.1. ノード(Node)

ノードとは、インフラ構成上の単一のサーバインスタンスを指す概念(AWSではEC2インスタンスと捉えて下さい)です。ノードは、特定のインスタンスの役割(エッジ(Edge)オリジン(Origin))を割り当てられた ノードグループ(NodeGroup)に属している場合があります。

ノードのライフサイクルは、ノードが属するノードグループに結び付けられます。ノードグループが削除されると、そのノードグループに属する各ノードも削除されます。

※ ノードとノードグループの結び付けは「 Launch Configuration 」を使用して定義し構成されます。詳細は後述します。

前述したように、ノードには次の役割があります。

エッジ(Edge)

エッジは視聴側の要求を受け付けます。エッジは、ストリーミングを行うために少なくとも1つのオリジンと関連を持つように構成されます。(親:オリジン、子:エッジ)

また複数のオリジンと通信するように設定することも可能です。

オリジン(Origin)

オリジンは発信元の要求を受け付けます。 視聴側も受け付けるように設定することも可能です。

↑目次に戻る


2.1.2. ノードグループ(NodeGroup)

ノードグループは、単一または複数のサーバインスンタンスを仮想的なグループに分類する概念です。各ノードグループは「グループID」または「名称」を使用して一意に識別されます。

ノードグループは、単一または複数のオリジン、エッジをノードグループに含めることができます。

↑目次に戻る


2.2. StreamManager

Red5 Pro Serverは、リアルタイムでライブストリーム情報を収集し負荷に応じて他のRed5Pro Serverインスタンスを管理し、スケールアウトまたはスケールインを制御するサーバアプリケーション「 StreamManager」を提供します。これはAutoScalingを実現する中核の機能となります。

↑目次に戻る


2.2.1. 概要

StreamManagerは、ストリーミング構成を管理しサーバーインスタンスの作成および削除のプロセスを自動化します。StreamManagerは配信側と視聴側との調整も行い、それぞれの配信側と視聴側の動作に適したサーバの連係を支援します。

ストリーム配信が開始されると、StreamManagerは各ストリーミング中のサーバから単純なREST APIRed5CloudWatch )の呼出しを受けます。このAPIを通じ、ストリーミングサーバの情報を得る事で全体の正確なストリーム量の統計をとることができます。

詳細には、サブコンポーネントである「Autoscaler 」が自動トラフィック管理を提供します。時間が経過する中、トラフィックの増減に対して自動的にスケールアウト/スケールインの指示を出します。これにより不要なサーバインスタンスの使用が削減され、クラウドプラットフォームのコストが削減されます。

まとめると、StreamManagerは以下のようなAutoScalingを実現するサブコンポーネントを有したアプリケーションです。

● クラウドプラットフォームのインスタンス展開

● ノードの管理

● ノードグループの管理

● ノードのトラフィック監視

● ストリーム要求に対する適切なノードエンドポイントへの配信側と視聴側の調整

↑目次に戻る


2.2.2. サブコンポーネント

概要 にて登場したStreamManagerのサブコンポーネントを一部紹介します。

Autoscaler

StreamManagerに組み込まれたソフトウェアモジュールであり、リアルタイムのノード管理を可能とします。ストリーミングサーバの負荷条件に基づいて、自動的にノードグループからノード(エッジとオリジン)をリアルタイムで追加または削除します。

Red5CloudWatch

アクティブなノードとStreamManager間の情報を受渡しを行うREST APIとして機能します。

技術的には、ノードから得た情報をサブコンポーネント「 Red5CloudWatchClient」に中継するJavaサーブレットです。

Red5CloudWatchは、次のような重要な情報の通知を中継します。

● クラスタレポート:ノードグループ負荷統計情報

● ストリーム配信通知

● ストリーム未発行通知

● ノードの役割を割り当てる通知

Red5CloudWatchClient

Red5CloudWatch から中継される情報を基に、通知の処理を担当するサブコンポーネントです。

アラーム条件を処理して、ノードグループごとに適切な通知をAutoSaler に送信します。

↑目次に戻る


2.2.3. Launch Configuration

LaunchConfigurationは、StreamManagerがAWS上でどのようにインスタンスを起動するかを定義する設定です。LaunchConfigurationの定義情報はREST APIを利用し、StreamManagerが動作するサーバのローカルファイルシステム上にJSONファイルとして保存されます。

LaunchConfigurationは、AWSのAMIイメージ名、使用するマシンの種類、インスタンスの推定接続容量などの重要なパラメータのセットを定義します。

↑目次に戻る


2.2.4. Scale Policy

ScalePolicyは、ノードグループをスケーリングするための単純なルールを定義します。一般にスケールインスケールアウト という2種類の動作があります。ScalePolicyは、グループをスケールイン/スケールアウトする方法を指定します。ScalePolicyの定義情報はREST APIを利用し、StreamManagerが動作するサーバのローカルファイルシステム上にJSONファイルとして保存されます。

↑目次に戻る


2.3. AutoScaling

本セクションでは、AutoScalingの概要を中心に解説していきます。

2.3.1. Autoscalerの責務

StreamManagerは、Red5CloudWatchサーブレットを通じて各ノードグループの負荷統計情報を受信します。 統計情報はノードグループのノード(オリジン)によって提供されます

AutoScalerは、ノードグループをスケーリングするためのルールを記述するScalePolicyを使用します。 ScalePolicyは、ノードグループに付属または関連付けることができます。各ノードグループは、異なる規模の方針を用いることができます。

特定のノード(オリジン/エッジ)の総負荷が過負荷状態に近づき、兄弟ノードが若干不足している場合、ノードグループに自動的に新しいインスタンスを追加します。AutoScalerはノードグループのScalePolicyを使用して、規模を変更する方法を決定します。

またノードグループからノードを削除するAutoScalerは、既存のサーバインスタンスをノードグループから削除します。AutoScalerは、ノードグループに設定されたScalePolicyを使用してノードの規模を決定します。

↑目次に戻る


2.3.2. AutoScalingのライフサイクル

Autoscaling Lifecycle

一般的にAutoScalingのライフサイクルは、上図のような スケールアウト(ScaleOut) とスケールイン(ScaleIn)の2種類の操作で構成されます。

↑目次に戻る


2.3.3. スケールアウト(ScaleOut)

ノードグループに新しいノードを追加する流れを想定し解説します。

① StremManagerは、Red5CloudWatchサーブレットを利用し、ノードグループの負荷状況およびストリーム統計のレポートを受信します。

② Red5CloudWatchClientは、対象ノード(エッジ/オリジン)のアラーム条件を評価します。評価によるアラームをAutoscalerに連携します。Autoscalerはそのアラームを受信し、その他の必要条件がないかチェックします。AutoScalerは条件が満たされない場合、条件が利用可能になるまでノードグループに対してAutoScalingを実行しません。条件が満たされた場合、スケールアウトを実行します。

(上図では、AWSへ新しいインスタンスを要求しています)

③ AWSはインスタンスを生成します。

④ 起動確認を行います。StreamManagerはインスタンスの状態遷移を追跡します。新しく起動されたインスタンスを追跡し、その状態がデータベース内で更新され、対象ノードグループの一部となります。

<インスタンスの状態値>

● 新しく起動されたインスタンス:(PENDING)

● インスタンスは動作していますが、Red5 Proは準備ができていません:(RUNNING)

● インスタンスの実行とRed5 Proの準備:(INSERVICE)

⑤ Autoscalerは、Launch ConfigurationやScale Policyを使用して、ノードグループの新しいノードを準備します。

(上図ではインスタンスに新しいエッジを割り当てています。)

⑥ 新しいノードの準備が完了すると、StreamManagerを呼び出します。

  1. ノードの役割(エッジまたはオリジン)をチェックします。
  2. Red5CloudWatchClientは、新しいノードがそのインスタンスの役割を認識させます。そのノードが関連する(親、または子)を探します。
  3. Red5CloudWatchClientは、新しいエッジ/オリジンをノードグループ内の他のエッジ/オリジンに関連付けることによって、動的にクラスタリングを実行します。

↑目次に戻る


2.3.4. スケールイン(ScaleIn)

ノードグループからノードを削除する流れを想定し解説します。

① エッジスケールインの場合、オリジンはStreamManagerを呼び出してエッジを削除します。StreamManagerは、使用中の状態をチェックしオリジンのスケールインを助長します。アイドル中のエッジの削除を要求します。

② Autoscalerは、ノード(インスタンス)の削除を要求します。

③ StreamManagerは、削除するインスタンスを追跡し、データベース上のその状態を更新します。

④ Autoscalerは削除の確認を行います。AWSがインスタンスが適切にシャットダウンされたことを報告すると、データベースからそのレコードは削除されます。

<インスタンスの状態値>

● 削除を指示中:TERMINATING

⑤ インスタンスが削除されたことでノード(エッジ)の削除が行われました。

↑目次に戻る


2.3.5. ノードのライフサイクル

スケールインとスケールアウトが正常に機能させるには、インスタンスの状態を追跡する必要があります。StreamManagerは、クラウドプラットフォームのAPI(Amazon EC2 API等)を利用してインスタンスを起動し、インスタンス状態の変更を追跡します。

Red5Proが提供するAutoScalingは、各プラットフォーム別で定義された異なるインスタンス状態を提供します。 StreamManagerは、プラットフォームが提供するインスタンスの状態を共通した状態の定義に正規化します。これにより、クラウドサービスとのクロスプラットフォーム統合が可能になります。

Red5 Node Lifecycle

↑目次に戻る


2.3.6. ノードライフサイクルの状態

ノードライフサイクルの状態を以下にまとめます。

● PEMDIMG:インスタンスが起動を開始しました。

● RUNNING:インスタンスは起動手順を完了しましたが、Red5ProServerは起動していません。

● INSERVICE:インスタンス上のRed5ProServerのサービスは準備完了、利用可能です。

● TERMINATING:インスタンスは終了するように指示され、現在は終了/シャットダウンしています。

● NULL:状態不明(オプション)

↑目次に戻る


2.3.7. ストリーミングオペレーションの流れ

以下は配信側、視聴側を含むStreamManagerのストリーミングオペレーションを解説します。

Red5 Pro Stream Manager Stream Operations

① 配信側はStreamManagerにオリジンを要求します。

② StreamManagerは、ラウンドロビン方式でオリジンを取得します。

③ StreamManagerは、割り当てられたオリジンを返します。

④ 配信側は、オリジンに接続して配信を開始します。

⑤ 視聴側はStreamManagerにエッジサーバを要求します。

⑥ StreamManagerは、利用可能なエッジサーバを返します。

⑦ 視聴側は、エッジサーバに接続して視聴を開始します。

↑目次に戻る


3. チュートリアル

3.1. はじめに

本チュートリアルを実施するには「前提条件と注意事項 」にも記載している以下の準備が必要です。事前にご確認頂きますようお願い致します。

● Red5Pro Serverの最新モジュール

● AWS制御ライブラリ「aws-cloud-controller.jar」

● Red5Pro Serverライセンス(GROWTH PROおよび、ENTERPRISE PRO)

● AWSアカウント

● 任意のドメイン

弊社からご案内したライブラリ「aws-cloud-controller.jar」は以下のディレクトリに配置されている事を前提と致します。

$HOME/Downloads

↑目次に戻る


3.1.1. パラメータの記録

本チュートリアルでは、構築に伴う多くのパラメータが存在します。セクションの要所で重要なパラメータについてはそれらを記録することを 強く推奨します

↑目次に戻る


3.1.2. AWSリージョンについて

AWSをはじめとするクラウドプラットフォームは、各地のリージョンにシステムを展開することで安定したストリーミングを提供することが可能です。

本チュートリアルでは、AWSリージョンを「アジアパシフィック(東京)」に限定します。

↑目次に戻る


3.2. AWS環境の構築

3.2.1. セキュリティ資格情報(IAM)の取得

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」を確認することができれば完了です。

↑目次に戻る


3.2.2. キーペアの生成

キーペアは、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

↑目次に戻る


3.2.3. 公開鍵をインポートする


作成した公開鍵をインポートします。 EC2ダッシュボード を開きます。

左ナビゲーションから「ネットワーク&セキュリティ」の「キーペア」をクリックします。

「キーペアのインポート」ボタンをクリックするとインポートウィンドウが開きます。

ボタン「ファイルを選択」をクリックし、ファイルチューザから作成した公開鍵red5pro.pub)を選択します。

選択すると以下のように読み込まれます。ボタン「インポート」をクリックし、キーペアをインポートします。

以下のようにキーペア「red5pro」が確認できれば完了です。

↑目次に戻る


3.2.4. Elastic(Static)IPの予約

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が予約されると、確認ダイアログが表示されます。

※ パラメータ「Elastic IP」

移行のセクションの設定で利用する為、このIPアドレスを記録することを推奨します。

<パラメータ:Elastic IP>

項目

Elastic IP

xxx.xxx.xxx.xxx

↑目次に戻る


3.2.5. VPCの作成

VPCを構築します。VPCダッシュボード( https://console.aws.amazon.com/vpc/home )に移動します。
左ナビゲーションのVirtual Private Cloudから「VPCの作成」をクリックします。

「ステップ1:VPC設定を選択」にて最初の/デフォルトオプションのタブ「1個のパブリックサブネットを持つVPC」を選択し「選択」ボタンをクリックします。

「ステップ2:1個のパブリックサブネットを持つVPC」にて、次の項目を設定し「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が正常に作成されました」と表示されたら完了です。

↑目次に戻る


3.2.6. サブネットのプロパティを変更する

再びVPCダッシュボード( https://console.aws.amazon.com/vpc/home )に移動します。

左ナビゲーションのVirtual Private Cloudから「サブネット」をクリックします。

前セクションパラメータ「VPC構成」 のサブネット名「red5proautoscaling」を選択します。

「アクション」をクリックし、「自動割り当てIP設定の変更」を選択します。

IPv4の自動割り当てのチェックボックスを選択し、保存ボタンをクリックします。

設定を終えたサブネットを再度選択し、詳細ペインのタブ「ルートテーブル」をクリックし、送信先に「0.0.0.0/0」のエントリがあることを確認します。

※ パラメータ「ルートテーブルID」

以降のセクションの設定で利用する為、このルートテーブルIDを記録することを推奨します。

<パラメータ:ルートテーブルID>

項目

ルートテーブルID

rtb-xxxxxxxxxxxxxxxx

↑目次に戻る


3.2.7. VPCにサブネットを追加する


続けて「サブネットの作成」をクリックします。

作成するサブネットの設定を行ないます。設定を完了したら「作成」をクリックします。

< サブネット設定 >

項目

名前タグ

red5proautoscaling-ap-northeast-1c

VPC

red5proautoscalingvpc

(前セクションパラメータ「VPC構成」 のVPC名)

アベイラビリティーゾーン

指定なし

サブネット名:

ap-northeast-1c

IPv4 CIDR ブロック *

10.0.1.0/24

次の画面が表示されたら「閉じる」をクリックして下さい。

続けて作成したサブネットを選択します。

「アクション」をクリックし「自動割り当てIP設定の変更」を選択します。

IPv4の自動割り当てのチェックボックスを選択し、保存ボタンをクリックします。

続けて、この新しいサブネットの「ルートテーブル」タブをクリックします。タブ内に表示された「ルートテーブルの変更」をクリックします

サブネットのプロパティを変更する 」で作成したルートテーブルIDを選択して「保存」をクリックしてください。

以下の画面が表示される事が確認できたら、サブネットの追加は以上です。

↑目次に戻る


3.2.8 セキュリティグループの作成

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」を開く必要がございます。詳細は「 アウトバウンドの設定時の注意点」を参照下さい。

セキュリティグループの作成は以上です。

↑目次に戻る


3.3. MySQLデータベースの構築

AutoScalingの状態を管理するために、データベースとしてMySQLの構築を行ないます。

ブラウザにてAWS RDSコンソール( https://console.aws.amazon.com/rds/ )にアクセスします。左ナビゲーションの「インスタンス」をクリックします。

「データベースの作成」をクリックします。

↑目次に戻る


3.3.1  ステップ1:「エンジンの選択」

MySQLを選択し、「次へ」をクリックします。

↑目次に戻る


3.3.2. ステップ2:ユースケース

「本番稼働用 - MySQL」を選択し「次へ」をクリックします。

↑目次に戻る


3.3.3. ステップ3:DB詳細の指定

ニーズに合わせて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ユーザの名称、パスワードを設定します。設定が完了したら「次へ」をクリックします。

※ パラメータ「RDSの接続定義」

移行のセクションの設定で利用する為、以下の設定を記録することを推奨します。

<パラメータ: DB接続定義の設定例 >

項目

DBインスタンス識別子

streammanager-db

マスターユーザの名前

red5proadmin

マスターパスワード

red5proadmin

パスワードの確認

red5proadmin

↑目次に戻る


3.3.4. ステップ4:詳細設定の設定

「ネットワーク&セキュリティ」では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インスタンスが表示されるはずです。初期化プロセスが完了するまで数分かかることがあります。

ステータスが「作成中」から「利用可能」に変更されたら、データベースインスタンスのリンクを選択して下さい。

※ パラメータ「RDSのエンドポイント」

セクション「接続」のエンドポイントを記録することを推奨します。

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からの接続対応」

さらに、StreamManagerのプライベートIPアドレスをセキュリティグループに追加する 必要があります。これは、StreamManagerインスタンスが予約済みのIPアドレスに関連付けられた後に割り当てられます。(インスタンス作成後に設定する)

↑目次に戻る


3.3.5. MySQLに接続しclasterスキーマを追加する

構築した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用のデータベース構築は完了です。

↑目次に戻る


3.4. EC2インスタンスの構築

本セクションでは、AWSインスタンスの構築手順について説明します。

3.4.1. AWSコンソールへのログイン

以下のURLより、AWSコンソールにログインして下さい。

AWSコンソールへ

↑目次に戻る


3.4.2. インスタンスの作成

ログイン後、画面「AWS サービス」に遷移したら「EC2」ダッシュボードをクリックして下さい。

「インスタンスの作成」をクリックし、EC2インスタンスを作成します。

3.4.3. Amazonマシンイメージ(AMI)の設定

↑目次に戻る


Amazon マシンイメージ(AMI)を指定します。「Ubuntu Server 16.04 LTS (HVM), SSD Volume Type」を選択します。

↑目次に戻る


3.4.4. インスタンスタイプの選択

AMIのインスタンスタイプを指定します。インスタンスタイプは利用用途に合ったサーバスペックを選択してください。本チュートリアルでは、最低限必要なスペック「t2.medium※①を選択しています。選択後「 次の手順: インスタンスの詳細の設定※②をクリックします。

↑目次に戻る


3.4.5. インスタンスの詳細の設定

インスタンスの詳細設定を行います。以下の項目のみ変更が必要です。

その他の項目についてはデフォルトの設定とします。

※ 検証利用の際は「T2/T3 Unlimited」の「有効化」からチェックを外して下さい。

設定が完了したら「次の手順: ストレージの追加」をクリックします。

<インスタンスの詳細の設定>

↑目次に戻る


3.4.6. ストレージの追加

項目

ネットワーク

オートスケーリング用に作成したVPCを選択します。

vpc-xxxxxxxx | red5proautoscalingvpc

自動割り当てパブリックIP

有効化

インスタンスのストレージタイプ、サイズの設定を行います。用途に合ったストレージの容量を設定して下さい。本チュートリアルではOSを含む最低限の容量 「 8GB※① を確保しています。VoDなど配信用動画ファイルを直接サーバ上に配置する運用の場合、それに見合うストレージ容量を準備する必要があります。設定後、「 次の手順: タグの追加※②をクリックします。

↑目次に戻る


3.4.7. タグの追加

タグを設定します。タグはAWS リソースを目的、所有者、環境などを「キー」と「値」で分類することができます。本稿ではタグを使用しないため、デフォルトの設定のまま「 次の手順: セキュリティグループの設定」をクリックします。

↑目次に戻る


3.4.8. セキュリティグループの設定

セキュリティグループの設定を行います。事前に作成済みのセキュリティグループ「red5proautoscaling」を選択します。設定を完了したら「 確認と作成」をクリックします。

<セキュリティグループの設定>

項目

セキュリティグループの割り当て

既存のセキュリティグループを選択する

名前

red5proautoscaling

「インスタンス作成の確認」で設定内容を確認し「作成」をクリックします。

↑目次に戻る


3.4.9. インスタンス情報の確認

インスタンスの作成情報を確認します。確認し、問題がなければ「作成」をクリックします。

↑目次に戻る


3.4.10. キーペアの選択

最後に表示されるダイアログ「既存のキーペアを選択するか、新しいキーペアを作成します。」では、「既存のキーペアの選択」を選択し、事前に作成した公開キー「red5pro」を選択します。

設定を完了したら、チェックボックス「選択したプライベートキーファイル (red5pro.pem) へのアクセス権があり、このファイルなしではインスタンスにログインできないことを認識しています。」にチェックを入れ「インスタンスの作成」をクリックします。

以下の画面が表示されたらインスタンスの作成は完了です。

(インスタンスの作成完了まで多少の時間が掛かります)

↑目次に戻る


3.5. Red5Pro Serverのインストール

本セクションではRed5Pro Serverのインストール手順について説明します。

引き続き、前セクションで構築したサーバへの作業となります。

3.5.1. サーバへのログイン

作成した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

↑目次に戻る


3.5.2. モジュールのコピー

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

↑目次に戻る


3.5.3. 必要なライブラリの追加

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

↑目次に戻る


3.5.4. Red5Pro Serverモジュールの解凍

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」という命名で作成してください。

↑目次に戻る


3.5.5. Red5Pro Serverモジュールのリネーム

使いやすさを考慮して、ディレクトリ「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

↑目次に戻る


3.5.6. 実行権限の追加

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

↑目次に戻る


3.5.7. サーバプロセスのサービス化

本セクションでは、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 \

↑目次に戻る


3.5.8. 「red5pro.service」の権限変更

「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

↑目次に戻る


3.5.9. サーバの起動

デーモンをリロードします。

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

サーバの起動に関しては以上です。

補足としてサーバの停止、状態の確認、再起動のコマンドを以下に示します。

↑目次に戻る


3.5.10. Red5Pro Serverの動作確認

本セクションでは、Red5Pro Serverの動作確認を行います。ポート5080でサーバにアクセスして、Red5Pro Serverが動作することを確認します。

ブラウザを開き、以下のURLにアクセスします。

http://ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:5080

以下の画面が確認できればサーバの動作確認は完了です。

↑目次に戻る


3.6. AutoScalingの設定

本セクションでは、AutoScalingに必要な環境の構築を行います。引き続き、Red5Pro Serverのインスタンスに対し作業を継続します。

3.6.1. NTPのインストール

ストリームマネージャとすべてのノードが同期していることを確認するため、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

↑目次に戻る


3.6.2. 「autoscaling.xml」の設定

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>

↑目次に戻る


3.6.3. クラスタパスワードの設定

クラスタの設定ファイルを編集します。

後述する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

↑目次に戻る


3.6.4. 動作確認(設定の適用後)


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

↑目次に戻る


3.6.5. AMIイメージの作成

ここまでのインスタンスイメージをAMIにします。

AutoScalingは、AMIを基にインスタンスを複製し、スケールアップする為です。

作成されたAMIはRed5Pro Serverのノード用を初め、インスタンスのベースとなります。

EC2ダッシュボードを開きます。「x個の実行中のインスタンス」をクリックします。

インスタンスを選択し、「アクション」=>「イメージ」=>「イメージの作成」をクリックします。

ダイアログ「イメージの作成」で「イメージ名」と「イメージの説明」を入力し「イメージの作成」ボタンをクリックします。

※ その他の項目はデフォルト設定のままにしておきます。

項目

設定値

イメージ名

red5pro-autoscaling

イメージの説明

for red5pro-autoscaling(任意)

※ パラメータ「イメージ名」

後のセクションで、このイメージ名が必要になります。

StreamManagerのlaunchconfigに必要です。記録することを推奨します。

<パラメータ:イメージ名>

項目

値(設定例)

イメージ名

red5pro-autoscaling

イメージ作成のリクエストが申請されました。作成が完了するまで多少の時間が必要です。

以上でRed5Pro ServerインスタンスへのAutoScalingの設定は以上です。

↑目次に戻る


3.7. StreamManagerインスタンスの構築

セクション「AMIイメージの作成 」で作成したAMIを基にStreamManagerの為のインスタンスを作成します。

3.7.1. AMIの選択

EC2ダッシュボードを開きます。「インスタンスの作成」をクリックします。

左タブから「マイ AMI」をクリックします。

Red5Pro Serverのノード用に作成したAMIを選択します。

↑目次に戻る


3.7.2. インスタンスタイプの選択

StreamManagerのインスタンスタイプを選択します。

本チュートリアルでは、最低限必要なスペック「t2.medium」を選択しています。選択後「 次の手順: インスタンスの詳細の設定」をクリックします。

※ プロダクション環境の場合、ネットワークパフォーマンスの高いマルチCPUインスタンスの構成(m4.largeなど)を選択することを推奨します。

↑目次に戻る


3.7.3. インスタンスの詳細設定

インスタンスの詳細設定を行います。以下の項目のみ変更が必要です。

その他の項目についてはデフォルトの設定とします。

※ 必ず「T2/T3 Unlimited」の「有効化」からチェックを外して下さい。

<インスタンスの詳細の設定>

項目

ネットワーク

vpc-xxxxxxxx | red5proautoscalingvpc

設定が完了したら「次の手順: ストレージの追加」をクリックします。

↑目次に戻る


3.7.4. ストレージの追加

StreamManagerインスタンスに必要なディスクサイズを設定します。

基本的にAMIと同じディスクサイズで十分です。

次の手順:タグの追加」をクリックします。

↑目次に戻る


3.7.5. タグの追加

次の手順:セキュリティグループの設定」をクリックします。

↑目次に戻る


3.7.6. セキュリティグループの設定

以下のポートを持つ新しいセキュリティグループ「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ポート

設定が完了したら「確認と作成」をクリックして下さい。

↑目次に戻る


3.7.7 インスタンス作成の確認

設定を確認して「作成」をクリックして下さい。

↑目次に戻る


3.7.8 キーペアの選択

既存のキーペアを選択するか、新しいキーペアを作成します。

本チュートリアルでは、既存のキーペアを再利用します。

設定後「インスタンスの作成」をクリックして下さい。設定に問題がなければインスタンスの作成を開始します。作成が完了するまで少し時間が必要です。「 インスタンスの表示」をクリックして下さい。

インスタンスが作成されている事が確認できます。

※ パラメータ「StreamManagerのインスタンスID」

構築されたEC2インスタンスの「インスタンスID」を記録することを推奨します。

Elastic IPアドレスを関連付けるために必要になります。

<パラメータ:セキュリティ資格情報>

項目

インスタンスID

i-xxxxxxxxxxxxxxxx(17桁の英数字)

↑目次に戻る


3.7.9. Elastic IPとの関連付け

EC2ダッシュボードを開きます。左側のナビゲーションの「ネットワークとセキュリティ」で、「Elastic IP」をクリックします。


パラメータ「Elastic IP」 のIPアドレスを選択し「アクション」から「アドレスの関連付け」をクリックして下さい。

リストからパラメータ「StreamManagerのインスタンスID」 をもとにインスタンスを選択します。

設定が完了したら「関連付け」をクリックします。

項目

インスタンス

StreamManagerのインスタンスID

プライベートIP

デフォルト値

以上で、StreamManagerインスタンスとのIDの関連付けが完了しました。

※ パラメータ「プライベートIP」

次のセクションで、このプライベートIPが必要になります。記録することを推奨します。

<パラメータ:プライベートIP>

項目

プライベートIP

10.0.1.24(※上記の例)

↑目次に戻る


3.7.10. RDS Secrutiryグループへの追加

StreamManagerからRDSへのアクセスを有効にする為、設定を行ないます。

※ 補足 「StreamManagerからの接続対応」

(インスタンスが生成されるまでIPが払い出されない為、RDS構築時には設定できません)

ブラウザにて別タブにてAWS RDSコンソール( https://console.aws.amazon.com/rds/ )にアクセスします。左ナビゲーションの「インスタンス」をクリックします。

作成済みのDBインスタンスを選択します。

セクション「詳細」のセキュリティグループを選択します。

タブ「インバウンド」開き、編集ボタンをクリックします。

「インバウンドルールの編集」にて「ルールの追加」をクリックします。

以下に従い、ルールの追加を行います。

<ルールの追加:Stream Managerからの接続設定>

項目

タイプ

MySql / Aurora

プロトコル

TCP

ポート範囲

3306

ソース

カスタム、パラメータ「プライベートIP」

説明

任意の説明を入力

完了したら保存ボタンをクリックします。

設定が確認できたら完了です。

↑目次に戻る


3.7.11. AWS Cloud Controllerの配置と有効化

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-autoscale-plugin-<version>.jar

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 -->
<!--
<bean id="apiBridge" class="com.red5pro.services.cloud.aws.component.AWSInstanceController" init-method="initialize"> <property name="accessKey" value="${aws.accessKey}"/>
<property name="accessSecret" value="${aws.accessSecret}"/>
<property name="ec2KeyPairName" value="${aws.ec2KeyPairName}"/>
<property name="ec2SecurityGroup" value="${aws.ec2SecurityGroup}"/>
<property name="defaultZone" value="${aws.defaultzone}"/>
<property name="defaultVPC" value="${aws.defaultVPC}"/>
<property name="vpcName" value="${aws.vpcName}"/>
<property name="operationTimeoutMilliseconds" value="${aws.operationTimeoutMilliseconds}"/>
<property name="faultZoneBlockMilliseconds" value="${aws.faultZoneBlockMilliseconds}"/>
</bean>
-->

デフォルトのコントローラをコメントアウトし無効化します。

(注:以下の赤太文字を追記ください。

<!-- Default CONTROLLER -->
<!--
<bean id="apiBridge" class="com.red5pro.services.cloud.sample.component.DummyCloudController" init-method="initialize">
</bean>

-->

以上で、StreamManagerがAWSへの制御を行えるようになりました。

↑目次に戻る


3.8. StreamManagerのSSL化

本セクションではStreamManagerへHTTPSで接続、運用する設定を行います。

以下の準備が事前に整っている事を前提します。

● ドメインの購入

○ DNSサーバの設定など

3.8.1. IPアドレスの割り当て

ご用意頂いたドメインに、パラメータ「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 9.10.3-P4-Ubuntu <<>> autoscaling.samuraiz.work
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42539
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;autoscaling.samuraiz.work. IN A

;; ANSWER SECTION:
autoscaling.samuraiz.work. 48 IN A xxx.xxx.xxx.xxx

;; Query time: 0 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Sat Nov 24 12:20:24 UTC 2018
;; MSG SIZE rcvd: 57

digコマンドにて設定したElastic IPが確認できれば完了です。

↑目次に戻る


3.8.2. Let's Encrypt

本チュートリアルでは、Let's Encryptの無料SSL証明書を取得します。

Let's Encryptは、インターネットセキュリティリサーチグループ(ISRG)の無料で自動化された公開認証局です。( https://letsencrypt.org)

Let's Encryptで取得した証明書は、90日毎に更新する必要があります。

ドメインが正しく設定されていない場合(DNSサーバ、IPアドレスなどホストの名前解決ができないなど)は証明書の作成を妨げる可能性があります。

※ パラメータ「Let’s Encryptのパラメータ」

Let’s Encryptを利用した証明書発行に利用するパラメータを以下に示します。環境に合わせて値を置き換える必要があります。

項目

ドメイン名

autoscaling.samraiz.work

パスワード

red5pro

メールアドレス

autoscaling@samraiz.com

↑目次に戻る


3.8.3. Let's Encryptのインストール

証明書を作成するには、最初に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

↑目次に戻る


3.8.4. CA署名付き証明書の発行

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...
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:N

正常に完了した場合、次のようなメッセージが表示されます。

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/autoscaling.samraiz.work/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/autoscaling.samraiz.work/privkey.pem
Your cert will expire on 2019-02-19. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

注意: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

IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to yourname@example.com.
- The following 'urn:acme:error:connection' errors were reported by
the server:

Domains: autoscaling.samraiz.work
Error: The server could not connect to the client to verify the
domain
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.

↑目次に戻る


3.8.5. キーストアの作成

キーストアを作成します。キーストアには、対応する公開鍵を持つ秘密鍵と証明書が含まれています。

Red5 Proの組込Tomcat用のキーストアを作成するには、PEM形式の証明書チェーンが必要です。 まず鍵と証明書をPKCS12形式のファイルにエクスポートします。

ubuntu@ip-xxx:~/letsencrypt$ sudo openssl pkcs12 -export \

-in /etc/letsencrypt/live/ autoscaling.samraiz.work/fullchain.pem \
-inkey /etc/letsencrypt/live/ autoscaling.samraiz.work/privkey.pem \
-out /etc/letsencrypt/live/ autoscaling.samraiz.work /fullchain_and_key.p12 \
-name tomcat

※ コマンドが長い為、「\」による改行を入れています。

パスワードを入力するように求められたら、パスワードを入力して、本セクションを通して必要となるので記録しておいてください。

Enter Export Password:*******(red5pro

Verifying - Enter Export Password:*******( red5pro

「Let’s Encryptのパラメータ」のパスワードです。

次にJavaキーストアを作成します。

ubuntu@ip-xxx:~/letsencrypt$ sudo keytool -importkeystore \
-deststorepass red5pro \
-destkeypass red5pro \
-destkeystore /etc/letsencrypt/live/ autoscaling.samraiz.work/keystore.jks \
-srckeystore /etc/letsencrypt/live/ autoscaling.samraiz.work /fullchain_and_key.p12 \
-srcstoretype PKCS12 \
-srcstorepass red5pro \

-alias tomcat

.

.

.

Importing keystore /etc/letsencrypt/live/adsh1y0.work/fullchain_and_key.p12 to /etc/letsencrypt/live/ autoscaling.samraiz.work/keystore.jks...

※ コマンドが長い為、「\」による改行を入れています。

※ 警告を伴う可能性がありますが問題ありません

キーストアの作成は以上です。

↑目次に戻る


3.8.6. トラストストアの作成

次にトラストストアを作成します。信頼する証明書をエクスポートします。

ubuntu@ip-xxx:~/letsencrypt$ sudo keytool -export -alias tomcat \
-file /etc/letsencrypt/live/ autoscaling.samraiz.work/tomcat.cer \
-keystore /etc/letsencrypt/live/ autoscaling.samraiz.work/keystore.jks \
-storepass red5pro -noprompt

※ コマンドが長い為、「\」による改行を入れています。

正常に完了した場合、次のようなメッセージが表示されます。

Certificate stored in file </etc/letsencrypt/live/ autoscaling.samraiz.work/tomcat.cer>

※ 警告を伴う可能性がありますが問題ありません

エクスポートされた証明書を取得したら、それをトラストストアにインポートします。

ubuntu@ip-xxx:~/letsencrypt$ sudo keytool -import -trustcacerts -alias tomcat \
-file /etc/letsencrypt/live/ autoscaling.samraiz.work/tomcat.cer \
-keystore /etc/letsencrypt/live/ autoscaling.samraiz.work/truststore.jks \
-storepass red5pro -noprompt

※ コマンドが長い為、「\」による改行を入れています。

正常に完了した場合、次のようなメッセージが表示されます。

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

以上で、トラストストアの作成は完了です。

↑目次に戻る


3.8.7. SSLの設定

本セクションの設定は、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
http.host=0.0.0.0
http.port=5080
https.port=443
.

.

.

# 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ファイルを保存して閉じます。

↑目次に戻る


3.8.8. JEEコンテナの設定

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 -->
<!--
<bean id="tomcat.server" class="org.red5.server.tomcat.TomcatLoader" depends-on="context.loader,warDeployer" 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}" />
<property name="connectionProperties">
<map>
<entry key="maxHttpHeaderSize" value="${http.max_headers_size}"/>
<entry key="maxKeepAliveRequests" value="${http.max_keep_alive_requests}"/>
<entry key="keepAliveTimout" value="-1"/>
</map>
</property>
</bean>
</list>
</property>

<property name="baseHost">
<bean class="org.apache.catalina.core.StandardHost">
<property name="name" value="${http.host}" />
</bean>
</property>

<property name="valves">
<list>
<bean id="valve.access" class="org.apache.catalina.valves.AccessLogValve">
<property name="directory" value="log" />
<property name="prefix" value="${http.host}_access." />
<property name="suffix" value=".log" />
<property name="pattern" value="common" />
<property name="rotatable" value="true" />
</bean>
</list>
</property>

</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」をコメントアウトを除去してください。

.

.

.

<!-- 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>

.

.

.

このファイルの修正後は、以下のようになるはずです。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd">

<!-- War deployer -->
<bean id="warDeployer" class="org.red5.server.tomcat.WarDeployer">
<property name="checkInterval" value="${war.deploy.server.check.interval}"/>
<property name="webappFolder" value="${red5.root}/webapps"/>
<!-- Expand war files prior to startup of the remaining services -->
<property name="expandWars" value="true" />
</bean>

<!-- Non-secured transports for HTTP and WS -->
<!--
<bean id="tomcat.server" class="org.red5.server.tomcat.TomcatLoader" depends-on="context.loader,warDeployer" 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}" />
<property name="connectionProperties">
<map>
<entry key="maxHttpHeaderSize" value="${http.max_headers_size}"/>
<entry key="maxKeepAliveRequests" value="${http.max_keep_alive_requests}"/>
<entry key="keepAliveTimout" value="-1"/>
</map>
</property>
</bean>
</list>
</property>

<property name="baseHost">
<bean class="org.apache.catalina.core.StandardHost">
<property name="name" value="${http.host}" />
</bean>
</property>

<property name="valves">
<list>
<bean id="valve.access" class="org.apache.catalina.valves.AccessLogValve">
<property name="directory" value="log" />
<property name="prefix" value="${http.host}_access." />
<property name="suffix" value=".log" />
<property name="pattern" value="common" />
<property name="rotatable" value="true" />
</bean>
</list>
</property>


</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は停止したまま作業を進めます。

↑目次に戻る


3.9. StreamManagerの各種設定

このセクションでは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

↑目次に戻る


3.9.1 設定セクション:データベース構成

## DATABASE CONFIGURATION SECTION
config.dbHost={host}
config.dbPort=3306
config.dbUser={username}
config.dbPass={password}

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の接続定義」を参照

↑目次に戻る


3.9.2 設定セクション:ノードコントローラ

ノードに対する振る舞いを設定します。

<NODE CONTROLLER CONFIGURATION SECTION>

項目

設定値

説明

instancecontroller.replaceDeadClusters

true

デフォルトはtrue、チュートリアルではtrueに設定。

この場合、応答しなくなったクラスタはすべてシャットダウンされます。

instancecontroller.deleteDeadGroupNodesOnCleanUp

true

デフォルトtrue、応答しないノードがダッシュボードから削除されます。

この値をfalseに設定すると、インスタンスは停止しますが、インスタンスは削除されません。

↑目次に戻る


3.9.3 設定セクション:クラスタ構成情報

<CLUSTER CONFIGURATION INFORMATION>

項目

設定値

説明

cluster.password

red5pro123

ディスクイメージのcluster.xmlファイルで設定したパスワードと同じに変更します。 パラメータ「クラスターパスワード」を参照。

↑目次に戻る


3.9.4 設定セクション:AWS CLOUD CONTROLLER

コメントを解除し、次のエントリを設定する必要があります:

## AWS CLOUD CONTROLLER CONFIGURATION ##
#aws.defaultzone={default-region}
#aws.operationTimeoutMilliseconds=200000
#aws.accessKey={account-accessKey}
#aws.accessSecret={account-accessSecret}
#aws.ec2KeyPairName={keyPairName}
#aws.ec2SecurityGroup={securityGroupName}
#aws.defaultVPC={boolean}
# aws.vpcName={vpc-name}
#aws.faultZoneBlockMilliseconds=3600000

< 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があり、古いアカウントでは使用できません)

↑目次に戻る


3.9.5 設定セクション:RESTセキュリティ

<REST SECURITY SECTION>

項目

設定値

説明

rest.administratorToken

autoscaling

streammanagerの使用を開始する前に、有効なパスワード文字列を設定する必要があります。これは、APIコマンドを実行するために使用するパスワードです。

↑目次に戻る


3.9.6 設定セクション:デバッキング設定


<DEBUGGING CONFIGURATION SECTION>

項目

設定値

説明

debug.logaccess

true

REST API経由でログファイルへのアクセスを許可する場合はtrueに設定します。これは、クラウド上での開発中に特に役立ちます。

ログアクセスを有効にすると、SSHを使用してStreamManager REST APIを使用してログファイルをダウンロードできます。ログアクセスAPIを使用する方法の詳細については、StreamManager Rest APIを参照してください。

↑目次に戻る


3.9.8 設定セクション:WEBSOCKET PROXY

<WEBSOCKET PROXY SECTION>

項目

設定値

説明

proxy.enabled

true

Stream ManagerのSSL PROXYを有効にする場合、trueを設定します。本チュートリアルではSSL PROXYを利用した動作確認を行うため、trueを設定します。

↑目次に戻る


3.9.9 設定ファイルの例(red5-web.properties)

以下は前述のセクションにて設定した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サービスを再起動する必要があります。

↑目次に戻る


3.9.10 サービスの起動

最後に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
Loaded: loaded (/lib/systemd/system/red5pro.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-10-24 00:00:24 UTC; 15h ago
Process: 3275 ExecStop=/usr/bin/jsvc -stop -pidfile ${PID} org.red5.daemon.EngineLauncher 9999 (code=exited, status=0/SUCCESS)
Process: 3279 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:$
Main PID: 3283 (jsvc)
Tasks: 65
Memory: 428.2M
CPU: 19min 16.271s
CGroup: /system.slice/red5pro.service
├─3283 jsvc.exec -debug -home /usr/lib/jvm/java-8-openjdk-amd64 -cwd /usr/local/red5pro -cp /usr/local/red5pro/commons-daemon-1.0.15.jar:/usr/local
└─3284 jsvc.exec -debug -home /usr/lib/jvm/java-8-openjdk-amd64 -cwd /usr/local/red5pro -cp /usr/local/red5pro/commons-daemon-1.0.15.jar:/usr/local

Oct 24 00:

↑目次に戻る


3.9.11 StreamManagerの動作確認

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

↑目次に戻る


3.10. Auto Scaleの指針計画

本セクションでは、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によるPOSTの流れ

Postmanは、HTTPによる多くのリクエスト操作に対応しています。以降で実行するAPIは、次のように実行することで可能になります。

Postmanを起動します。

リクエストメソッドをPOSTに設定します。

エンドポイントを入力します。

タブ「Body」から「raw」を選択

プルダウンから「JSON」を選択します。

送信するJSONを入力します。

Sendボタンをクリックして実行します。

結果は下部ペインにレスポンスのボディ、ステータスコードが確認できます。

↑目次に戻る


3.10.1. スケールポリシーの計画

スケールポリシーは、その名の通りインスタンスの規模、構成を決定するポリシーです。

負荷状況が発生した時にオートスケールが新しいエッジを起動する最小、最大インスタンス数などの詳細を定義します。

スケールポリシーを作成するAPIを以下に示します。

API:Create Scale Policy

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データ構造は以下です。

{
"policy": {
"name": "<policy-name>",
"description": "<policy-description>>",
"version": "<policy-version>",
"type": "<policy-type>",
"targets": {
"target": [
{
"role": "<role>",
"minLimit": "<min-node-count>",
"maxLimit": "<max-node-count>",
"scaleAdjustment": "<node-scale-adjustmant>"
}
]
}
}
}

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」としています。

{
"policy": {
"name": "scale1",
"description": "Sample Scale Config policy with all node types",
"type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
"version": "0.0.3",
"targets": {
"region": [
{
"name": "default",
"target": [
{
"role": "edge",
"maxLimit": 2,
"scaleAdjustment": 1,
"minLimit": 1
},
{
"role": "origin",
"maxLimit": 1,
"scaleAdjustment": 1,
"minLimit": 1
},
{
"role": "relay",
"maxLimit": 1,
"scaleAdjustment": 1,
"minLimit": 1
}
]
}
]
}
}
}

※ パラメータ「スケールポリシーの名称」

後の設定に必要になります。記録することを推奨します。

項目

説明

name

scale1

このポリシーを構成する設定の名称です。

詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。

https://www.red5pro.com/docs/autoscale/smapi-scalepolicy.html

↑目次に戻る


3.10.2 起動設定(Launch Configuration)

各ノードタイプを含む、起動設定を定義します。

起動設定では、インスタンススペック、最大接続数などを定義します。

前セクションパラメータ「イメージ名」 で作成したAMIの名前が必要です。必要に応じて、ノードタイプ毎に異なるインスタンススペックと容量を選択できます。

API:Create Launch Configuration

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

↑目次に戻る


3.11. ノードグループの作成

前セクションにて作成した2つのポリシーを「ノードグループ」という単位で定義します。

それぞれのポリシーを一意付けるための名前は以下になります。

パラメータ「スケールポリシーの名称」

パラメータ「起動設定の名称」

API:Create Node Group

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サーバを作成するために使用されます。

{
"id": 1,
"name": " group-260c318a-0436-4f14-98e4-e72b9b6a2a61 ",
"originConnections": 0,
"regions": [
"ap-northeast-1"
],
"launchConfig": "launch-config1",
"scalePolicy": "policy-01",
"timestamp": 1534840964132
}

後の設定に必要になります。記録することを推奨します。

属性

説明

name

group-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

クラスタの名称です。

詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。

https://www.red5pro.com/docs/autoscale/smapi-groups.html

↑目次に戻る


3.12. オリジンの起動

ノードグループを作成したら、オリジンサーバを起動します。

スケールポリシーの計画 にて設定した構成に合わせインスタンスが起動します。

<cluster-name>には、パラメータ「クラスター名称」 で記録したノードグループIDを設定します。

API:Launch New Origin

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

↑目次に戻る


3.13. アラーム閾値の設定

StreamManagerは、任意のノード(例えばエッジ)をスケールアップする閾値(パーセンテージ)も管理しています。デフォルトのアラーム閾値は 60%に設定されています。これを変更するAPIが提供されています。

API:Set Alarm Threshold

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のエラーステータスコードです。

{
"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が返却されれば完了です。


詳しいAPIの仕様、パラメータについては、以下のオンラインマニュアルをご確認下さい。

https://www.red5pro.com/docs/autoscale/smapi-alarms.html#set-alarm-threshold

↑目次に戻る


3.14. ノードグループの確認

オリジンの起動後のノードグループに設定されている各ノードの状態を確認します。

<cluster-name>には、パラメータ「クラスター名称」 で記録したノードグループIDを設定します。

API:List Group Nodes

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」になっていることをここで確認して下さい。

↑目次に戻る


3.15. StreamManager pub/subサンプルによる動作確認

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)

なし

↑目次に戻る


3.15.1 配信サンプルアプリ(publisher)の確認

ブラウザを起動し、以下のURLを実行し、ストリームマネージャの配信サンプルアプリを起動します。

https://autoscaling.samuraiz.work/live/proxy-publisher.html?streamName=stream1&verbose=1

※ ブラウザの右ペインはChromeのデベロッパーツールです。起動ログの詳細を確認することができます。

上記のように「Publish.Start」と表示されたら配信が開始されています。

またデベロッパツールのコンソールにて以下の情報を確認して下さい。

この配信サンプルが接続している先は、API:List Group Nodes の実行結果にて確認できたオリジン(origin)インスタンスと同じIPアドレスとなっているはずです。AutoScaleの構成に従い正常にインスタンスに接続することを確認することができました。

↑目次に戻る


3.15.2 視聴サンプルアプリ(subscriber)の確認

次にブラウザにて別タブを起動し、以下のURLを実行し、ストリームマネージャの視聴サンプルアプリを起動します。

https://autoscaling.samuraiz.work/live/proxy-subscriber.html?streamName=stream1&verbose=1

上記のように「Subscribe.Start」と表示されたら、わずかな遅延を伴いますが、配信中の映像を確認することができます。Chromeのデベロッパツールのコンソールにて以下の情報を確認して下さい。

この視聴サンプルが接続している先は、API:List Group Nodes の実行結果にて確認できたエッジ(edge)インスタンスと同じIPアドレスとなっているはずです。視聴側でもAutoScaleの構成に従い正常にインスタンスに接続することを確認することができました。

↑目次に戻る


3.15.3 スケールアウトされたedgeインスンタンスの確認

前セクションに引き続き、更にブラウザにて別タブを起動して視聴サンプルアプリを起動します。

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のデベロッパツールのコンソールにて以下の情報を確認して下さい。スケールアウトされたサーバに接続できている事が確認できました。

↑目次に戻る


3.16. トラブルシューティング

ノードグループを作成したにもかかわらず、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" />

↑目次に戻る


補足(Red5Pro Server)

アウトバウンドの設定時の注意点

アウトバウンドの設定時の注意点について解説します。

AWSに限らず、一般的なサーバのインバウンド、アウトバウンドは「必要なポートのみを然るべき箇所から接続可能にする、もしくは通信可能にする」というのがセオリーです。

しかしRed5Pro Serverの仕様上、アウトバウンドにはポート「443」を必ず開けるようにして下さい。

本セクションでは、アウトバウンドへポート「443」を開ける設定の手順を示します。

1. AWSコンソールへのログイン

以下のURLより、AWSコンソールにログインして下さい。

AWSコンソールへ

↑目次に戻る


2. セキュリティグループ編集

セキュリティグループを編集します。ログイン後、画面「AWS サービス」に遷移したら「EC2」ダッシュボードをクリックして下さい。

以下の画面に遷移したら、「X個のセキュリティグループ」をクリックします。

セキュリティグループ一覧画面に遷移したら、編集するセキュリティグループ※1、「 アウトバウンド※2の順にクリックします。

その後表示された「編集※3をクリックし、アウトバウンドを編集します。

↑目次に戻る


3. アウトバウンドのルールの編集

アウトバウンドにルールを追加していきます。まず「ルールを追加」をクリックします。

クリックすると、以下のキャプチャーに示す行が追加されます。

各項目に設定する値を以下の表に示します。

ルールの設定値

タイプ

プロトコル

ポート範囲

ソース

説明

カスタムTCP

TCP

443

カスタム(0.0.0.0/0)

標準のHTTPSポート

設定後「保存」をクリックします。

完了後、アウトバウンドのルール一覧に設定が反映されていたら、ルールの追加は完了です。

↑目次に戻る