2020.11.09
AWSにはLiveストリーミング配信機能があります。
実装としては、現在(2020年11月)、MediaLiveからの入力に対して以下の2通りの方法があります。
これらは、ライブ配信された画像を一時的にため込む場所として利用します。
これらの違いとしては、MediaPackageは、ライブからVOD(Video on demand)を作成する機能、およびDRM(デジタル著作権管理)を組み込む機能が存在するそうです。
https://aws.amazon.com/jp/mediastore/faqs/
ちなみに実装はMediaStoreの方が直感的で分かりやすいです。
また、AWSのLiveストリーミング自体、複数の配信者が動的に回線を追加、削除できるような設計にはなっておりません。
ネット番組やTV番組のように、あらかじめ番組が決められている場合を想定しているようです。
Media LiveとMedia Packageを組み合わせた構成としては以下のような感じになると思います。
Media Liveに2つの回線がある理由は、1回線分は冗長化の為のようです。
それでは構築の手順を以下に示します。
上記の図の × となっている箇所の実装です。
まずは、IAMにアクセスして、左ペインから 【アクセス管理】>【ポリシー】を選び、【ポリシーの作成】を選択します。
【JSON】タグを選択します。
最初は以下のようになっています。
JSONの内容を以下のように変更します。
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 | { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecrets", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "*" } ] } |
JSONが入力できたら、【ポリシーの確認】ボタンを押します。
名前、説明を入力します。
※概要に関してはそのままでOKです。
入力できたら、【ポリシーの作成】ボタンをクリックして作成を完了してください。
【ユースケースの選択画面】でMedia Packageが無い(2020年10月時点)ので、ひとまず EC2を選択して下さい。
【次のステップ:アクセス権限】ボタンをクリックします。
ポリシーのフィルタに、先ほど作成したポリシーの名前を入力します。
上記例では、【MediaPackageCDNAuthPolicy】となります。
フィルタがかかり、先ほど作成した MediaPackageCDNAuthPolicyが一覧に出てきます。
チェックを入れて【次のステップ:タグ】ボタンをクリックします。
何も入力せずにそのまま【次のステップ:確認】ボタンを押して次へ移動します。
ロール名を以下のようにします。
信頼されたエンティティには、ユースケースで選択した【AWS のサービス: ec2.amazonaws.com】と表示されているはずです。
また、ポリシーには、上記で指定した【MediaPackageCDNAuthPolicy】が表示されています。
入力できたら、【ロールの作成】ボタンをクリックしてロールを作成します。
これで、とりあえずEC2を用いたロールができたはずです。
ロールを登録するとロール一覧画面に戻ってきます。
ロール一覧のリストタイトル上部に【検索】入力欄がありますので、上記で作成したロールを検索欄に入力してください。
その後、作成したロールを選択します。
概要画面を表示したら【信頼関係】タブを選択します。
タブ内にある【信頼関係の編集】ボタンを押してください。
以下のように、Serviceに ec2.amazonaws.com となっているはずです。
ここで “Service” の値を ec2.amazonaws.com → mediapackage.amazonaws.com に変更します。
変更できたら、【信頼ポリシーの更新】ボタンを押して変更を確定します。
信頼されたエンティティには、先ほど変更したIDプロバイダー【mediapackage.amazonaws.com】に変更されているはずです。
また、ロールARNは次回使いますので、必ずメモしておいてください。
認証コードについては、「長さが8~128文字であること」という制限があるとのことです。
またUser Guideではversion 4 UUIDを使用することを推奨しているので、これにならいます。
こちらのページを参考に、手元の環境でversion 4 UUIDを生成しました。
https://www.uuidgenerator.net/version4
今回生成した値は、こちらです。
7f33895c-e8e1-4eb7-9417-1929156a20b0
以下の作業で必要になりますので、生成した値をメモしておいてください。
AWSコンソールより、Secrets Manager を選択します。
以下の画面が表示されますので、【新しいシークレットを保存する】ボタンを押します。
その他のシークレットを選択します。
【このシークレットに格納するキーと値のペアを指定します】に以下のように設定します。
「暗号化キーを選択してください」にはデフォルトのまま、DefaultEncryptionKey とします。
そして、【次】ボタンを押します。
シークレットの名前、および説明を入力します。
ここでは上記のように入力して【次】ボタンを押します。
「自動ローテーションを無効にする」を選択し、【次】ボタンを押します。
確認画面で確認したら、そのまま【保存】ボタンを押してください。
一覧画面から、今、登録したシークレットを選択してください。
この例では、MediaPackage/CDNAuth001 となっているはずです。
シークレットのARNをメモしておいてください。
後からこの値を使用します。
AWSコンソールより、MediaPackage を選択します。
以下の画面が表示されますので、【Create a new channel】ボタンを押します。
(3. 1) Channelの作成
以下の項目に値を設定する。
【CloudFront distribution details】のラジオボタンを以下にする。
・Create a CloudFront distribution for this channel
※これを設定すると CloudFrontをバイパスして直接 MediaPackageのEndpointにアクセスするのを防ぐようになる。
【Create】ボタンをクリックする。
作成すると詳細画面に遷移するので、そこにある【Add endpoints】ボタンを押す。
※【Secrets role ARN】は、Cloud Frontバイパス対応用ロールセクションで作成したARNを指定。
※【CDN identifier secret】は、Cloud Frontバイパス対応用ロールの認証コードセクションで作成したARNを指定
上記入力したら【Save】ボタンをクリックして保存する。
上記で作成したChannelの詳細画面を開く
Inputのセクションを確認する。
Inputに2つ、それぞれURL、Username、passwordが設定されている。
以下のMediaLive作成時に指定する事になるので、これらの値を全てメモしておく。
コンソールより、CloudFrontにアクセスする。
リストに1つレコードがあるので、チェックボックスをチェックして、【Edit】ボタンをクリックする。
Origin Custom Headersに以下を指定する。
※【Cloud Frontバイパス対応用ロールの認証コード作成】で生成したUUID version4の値
【AWS Elemental MediaLiveの使用開始】ボタンをクリックする。
左ペインより、【Channels】をクリックする。
【Create channel】ボタンをクリックする
Channel nameを【DemoMediaLiveChannel1】(任意)とする。
【Create role from template】を選択して、【Create IAM role】ボタンを押すと自動でRoleが作成され、【MediaLiveAccessRole】という名前で自動選択される。
Templateに【HTTP live streaming】を選択する。
それ以外はデフォルトのまま、左ペインの Input attachments (0) の横にある【Add】ボタンをクリックする。
画面が遷移し、You don’t have any available inputs to attach とメッセージが表示された画面が表示される。
右上に【Create input】ボタンがあるので、それをクリック。
Input nameには任意の文字をセットする。
ここでは、Input001ForMediaPackageとしている。
Network modeには、一般公開するつもりなので、【Public】を選択。
Input security groupには、RTMPを受けるinput側の IPアドレスの制限範囲をCIDR形式で指定する。
ここでは、特にIPアドレス制限は設けないので、0.0.0.0/0 と指定しておく。
【Create input security group】ボタンを押すと、IPアドレス範囲が自動で指定され【Use existing】が選択された状態になる。
Input destinations には、Destination A、Destination Bの2回線分の設定を行う。
Application name and instanceで指定した値は、RTMPのURLの一部になる。
ここまで入力できたら【Create】ボタンを押す。
正常に登録されると、Inputを Attachする画面に戻ってくる。
Inputプルダウンには、上記で作成した Input (ここでは、Input001ForMediaPackage)が選択可能になるので、それを選択する。
【Confirm】ボタンを押して、Inputのアタッチを完了する。
Inputのアタッチが完了するとチャンネル登録画面に戻ってくる。
左ペインの Output groups (1) の下の、1. TN2224 (HLS)の リンク (赤線の部分) をクリックする。
MediaLiveのChannelのOutput側にMediaPackageのChannel、Inputの値を割り当てる。
上記、MediaPackage作成時の InputのURL、Username、password2回線分を、destination A、destination Bそれぞれに割り当てる。
なお、Passwordは、Create parameterを選択して、Nameは任意の文字列で良い。
上記のように設定したら、【Create parameter】ボタンを押す。
※上記例の値は参考例です。
destination Bに対しても2回線目の値を設定する。
上記のように設定したら、【Create parameter】ボタンを押す。
※上記例の値は参考例です。
下段にスクロールしていくと、HLS outputs欄があるので、不要なアウトプットを削除する。
ここでは、Output3、Output4、Output5、Output6、Output7、Output9、Output10を削除する。
この場合は、該当する Outputの右側の ×ボタンを押して削除。
ここまでできれば、左ペインの【Create channel】ボタンを押して確定する。
以上で、設定は全て完了となる。
実際に、稼働させてみるには、MediaLiveのChannel詳細に移動して、【start】ボタンを押す。
Channel stateが Idle → Starting → Runningに変化し、起動が完了する。
Inputの Application name and instance で指定した値が Endpointになり、ここにストリーミングを流すと配信できる。