MediaTailor Channel Assembly を S3 オリジンのパターンで触りながら理解してみた

MediaTailor Channel Assembly、完全に理解したい
2022.01.07

こんにちは、大前です。

昨年 3月のアップデートで登場した MediaTailor の機能の一つである Channel Assembly について理解が曖昧だったため、S3 オリジンを利用した構成を試してみながら理解を深めてみました。

ハマりつつ、実際に試してみるとかなり理解が深まったため、備忘録としてブログにしたいと思います。

構成

下記の様な構成で MediaTailor Channel Assembly 機能を利用します。

MediaTailor Channel Assembly は複数のオリジンをソースとして、リニアな配信を実現できる機能ですが、今回は一つの S3 オリジンのみをソースとして利用します。

やってみた

S3 の準備

バケットの作成

大元の動画ファイルを格納する S3 バケットを用意します。今回は oomae-local-mediatailor-channel-assembly-<アカウントID> という名前で S3 バケットを作成しました。

さらに、作成したバケットに mesoko/hls/ というフォルダを作成し、今回利用する動画ファイル(形式は HLS)を保存しました。 今回は 190711_Mesoko_Jul_1920x1080.m3u8 がトップのマニフェストファイルとなります。

HLS のファイルを用意する方法は色々あるかと思いますが、MediaConvert を利用すると手持ちの mp4 動画ファイル等を HLS 形式に変換できます。

アクセス許可の追加

以下 2つの目的で、作成した S3 にバケットポリシーを追加します。

  • MediaTailor が S3 に格納されているマニフェストファイルを読み取るため
  • クライアントが S3 から動画コンテンツ(tsファイル)を取得できる様にするため

MediaTailor Channel Assembly のエンドポイントが提供するのはあくまでマニフェストファイルのみで、実態の動画ファイルはクライアントから直接各オリジンにリクエストされる形になります。そのため、今回であればクライアントが S3 上の動画ファイルを直接取得できる様に設定を行う必要があります。HLS 等に明るい方であればすぐに理解できそうですが、詳しくない方だとハマりやすいポイントになりそうです。

具体的には下記の様なバケットポリシーを追加しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "Service": "mediatailor.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<作成したバケット名>/*"
        },
        {
            "Sid": "Statement2",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<作成したバケット名>/*"
        }
    ]
}

同じ理由より、ブロックパブリックアクセスについてもオフにします。

今回は S3 オリジンを利用する検証をしたいため S3 バケットを公開する様な設定を入れましたが、セキュリティやパフォーマンス面で、本番用途であれば前段に CloudFront を挟んだ構成をオリジンとして利用した方が良いかと思います。

MediaTailor Channel Assembly の設定 -Source location 編-

続いて、MediaTailor Channel Assembly の設定を進めます。

コンソールより、「AWS Elemental MediaTailor」→「Source locations」→「Create source location」から Source location の新規作成画面を開きます。

以下パラメータを入力/選択し、画面右下の「Create source location」をクリックする事で Source location を作成します。

  • Name ... (任意の名前)
  • Base URL ... https://<バケット名>.s3.<リージョン名>.amazonaws.com/
  • Use access configuration ... 有効
  • Access type ... SigV4 for Amazon S3

作成された Source location(今回だと "BlogLocation")を開いた上で「Add VOD source」をクリックし、ソースの設定を行います。

  • Name ... (任意の名前)
  • Source group ... デフォルトのまま
  • Type ... HLS
  • Relative path ... S3 に配置した HLS のマニフェストファイルへのパス(今回だと /mesoko/hls/190711_Mesoko_Jul_1920x1080.m3u8

特にエラーなくソースの追加が実施できれば OK です。

MediaTailor Channel Assembly の設定 -Channel 編-

続いて、MediaTailor Channel Assembly の Channel を設定します。

コンソールより、「AWS Elemental MediaTailor」→「Channels」→「Create channel」から Channel の新規作成画面を開きます。

  • Name ... (任意の名前)
  • Playback mode ... Loop

  • Manifest name ... index
  • その他項目 ... デフォルトのまま

  • Channel policy ... Attach a public policy

「Create Channel」を実行し、問題なく Channel が作成されれば OK です。

MediaTailor Channel Assembly の設定 -Program 編-

上記手順で作成した Channel(今回だと BlogChannel)を開き、「Add program」をクリックしてプログラムの作成を行います。

  • Name ... (任意の名前)
  • Source location name ... Select an existing source location
  • Select an existing source location ... <前の手順で作成した Location を選択>(今回だと BlogLocation)
  • VOD source name ... Select an existing VOD source
  • Select an existing VOD source ... <前の手順で作成した Source を選択>(今回だと Source1)
  • その他項目 ... デフォルトのまま

「Add Program」を行い、問題なくプログラムの作成ができれば OK です。

Channel の画面に戻ると、下記の様に作成したプログラムが表示されていれば OK です。

MediaTailor Channel Assembly からの再生を確認してみる

一通りの設定が完了したので、実際に MediaTailor Channel Assembly からの配信を確認してみます。

作成した Channel を開いた状態で、右上の「Start」をクリックすることで配信が開始されます。

ステータスが "Running" になったら、同じく Channel を開いた状態で「Outputs」タブを開くと、MediaTailor Channel Assembly の再生 URL が確認できます。

今回は再生を確認するためのプレイヤーとして VideoJS HLS を利用しました。

画面中央の "Video URL" に先ほど確認した再生 URL を貼り付け、ロードします。

特に問題なく S3 に配置したコンテンツが取得できれば OK です。

また、開発者ツール等でマニフェストファイルとセグメントファイルの取得先を確認すると、マニフェストファイルは MediaTailor Channel Assembly から取得し、各種動画ファイル(tsファイル)は S3 にリクエストしている事がわかります。このことから、MediaTailor Channel Assembly はあくまで各種ソースのマニフェストファイルを元にリニア配信向けのマニフェストファイルを再構築してくれるだけであり、実体の動画ファイルが存在するオリジンは変わらずそれぞれのソース(今回でいえばS3)が担っている事が体感でき、MediaTailor Channel Assembly の役割をとても理解できた気がします。

おわりに

昨年 MediaTailor に追加された機能である Channel Assembly を S3 オリジンをソースとして触ってみました。

マニフェストファイルの配信元と実体のセグメントの配信元をそれぞれ確認する事で、MediaTailor Channel Assembly が持つ役割を理解でき、よかったです。

MediaTailor Channel Assembly については、下記ブログも参照ください。

以上、AWS 事業本部の大前でした。

参考