Amazon Web Services ブログ

DAZN はイベントベースの動画ストリーミングを大規模にオーケストレーションするために AWS Step Functions をどのように利用しているか

本ブログは、DAZN の Russ Johnson と、AWS の Corneliu Croitoru、Chris Fane によって共同執筆されています。

このブログ記事では、グローバルなスポーツエンターテイメントプラットフォームである DAZN が、ライブスポーツストリーミングイベントを自動化するために、軽量でモジュラー式かつ拡張可能なオーケストレーターを構築するために、Amazon Web Services(AWS)の AWS Step Functions をどのように使用したのかをご説明します。DAZN はこのアーキテクチャにより、イベントの分類設定と耐障害性の要件に基づき、ジャストインタイムのメディアワークフローをデプロイできるようになりました。

DAZN は、オーバーザトップ(OTT)ストリーミングプラットフォーム上で、世界中の何百万人ものお客様に向けて、トップクラスのスポーツを毎週放送しています。この視聴体験を契約者に提供するために、DAZN は複雑な動画ワークフローのデプロイを管理しつつ、ストリーミングプラットフォームを構成するバックエンドアプリケーションサービスとの連携を図る必要があります。

従来、放送局は視聴者の需要ピーク時に備えて専用のオンプレミス機器を使用していたため、多くの場合、これらのリソースを十分に活用することができませんでした。さらに、オンプレミスシステムは柔軟性に欠け得り、北米または欧州規格のどちらかの事前設定を必要とします。国際放送局にとって、これは、ある規格用の機器に対する需要が供給を上回っている一方で、もう一方の規格用の機器はアイドル状態であることを意味します。結果として、放送スケジュールからイベントは外され、契約者を落胆させてしまう可能性がありました。

DAZN のビジネスはイベントベースであり、イベントの多数は夜や週末に開催されています。柔軟なクラウドベースのソリューションに移行することで、DAZN などのお客様は、使用中のリソースに対してのみ支払いを行いながら、ピーク時の需要に合わせてスケールすることができます。

課題

クラウドにメディアワークロードを移行することで、お客様はクラウドの弾力性を活用できますが、これらのワークロードを手動でデプロイするためには多くの手順が必要となります。DAZN は世界中でイベントを配信しており、いつでも数十から数百のイベントを開催できます。イベントの開始直前にワークロードをクラウドインフラストラクチャに自動的にデプロイすることで、DAZN はコストを最適化でき、運用上のオーバーヘッドを最小限に抑えることが可能です。このようなインフラストラクチャの設定やローンチには、時間を要するものも含まれているため、人為的ミスを防ぐために自動化は不可欠でした。次の図は、午後 7 時から午後 9 時まで開催されるメディアイベントで発生する、オペレーションの概要を示しています。

FigurBasic event broadcast timeline

図 1: 基本的な放送イベントのタイムライン

ライブイベントの開始時刻である午後 7 時前には、イベントのプレロールと呼ばれる時間帯があります。このプレロールでは、すべてのデプロイステップが完了するまでに十分な時間を確保し、運用チームがイベントインフラストラクチャを検証し、土壇場での変更に備えるための安全上の余裕を持たせる必要があります。ライブスポーツではリスクが高く、インフラストラクチャの設定やプロビジョニングに遅れがあると、視聴者は試合の重要な局面を逃してしまう可能性があります。

DAZN は、運用チームが数百万もの家庭やモバイルデバイスにスポーツイベントの生中継を配信する際、より業務の細部に集中できるよう、スケジュールに沿ったイベントインフラストラクチャのデプロイ、管理、および解体を自動的にオーケストレーションできる、信頼性が高く、軽量なアプリケーションを必要としていました。

ソリューション

以下のタイムラインは、DAZN の新しいソリューションを用いた、午後 7 時から午後 9 時まで開催されるスポーツ生中継イベントで発生する、エンドツーエンドのオペレーションを示しています。

End-to-end timeline for an event

図 2: イベントのエンドツーエンドのタイムライン

これらのオペレーションを実現するために、DAZN は AWS CDK 経由でデプロイされる AWS Step Functions を利用したサーバーレスソリューションを実装しました。

AWS Cloud Development Kit (AWS CDK)は、使い慣れたプログラミング言語でクラウドリソースをコードとして定義するために使用できる、オープンソースのソフトウェア開発フレームワークです。AWS CDK では、一般的なアーキテクチャパターンを 1 つの Construct にまとめて、複数回再利用できます。CDK のコードベースは、一貫性のある、信頼性の高い方法でインフラストラクチャをデプロイするために、一般的な CI/CD プラクティスに従ってバージョン管理およびテストできます。

AWS Step Functions は、お客様が分散型アプリケーションを構築し、メディアワークフローやビジネスプロセスをオーケストレーションするために使用できる、ローコードのビジュアルワークフローサービスです。AWS Step Functions は、数多くの AWS サービスとネイティブに統合でき、お客様はこのサービスを用いて、堅牢なワークフローを構築できるため、開発者はより価値の高いビジネスロジックに集中できます。AWS Step Functions では、オペレーターが複雑なイベントライフサイクルの現状を理解できるよう、ステートの追跡や視覚化機能を提供しています。

High-level architecture of the video streaming orchestration workflow

図 3: 動画ストリーミングのオーケストレーションワークフローのアーキテクチャ概要

Amazon DynamoDB(4)テーブルには、アップストリームのスケジューリングシステムから供給される、スケジュールされたイベント情報が格納されています。このイベント情報には、イベントの固有 ID のほか、イベントのプレロールタイムスタンプなどイベントの設定データや、イベントの耐障害性や冗長性の要件を定義する、技術的な詳細が含まれています。

1 日 1 回、「Fetch Events」(イベントの取得)のAWS Lambda 関数(3)が AWS CloudWatch(1)と Amazon EventBridge(2)によってトリガーされます。このLambda 関数が、次の24 時間以内のすべてのイベントを対象に DynamoDB テーブル(4)に対してクエリを実行し、処理を行うために SQS Queue(5)のキューに入れます。「Event Scheduler」(イベントスケジューラー)の Lambda 関数(6)が、キューからイベントを取得し、イベントごとに Step Functions execution を、イベントステートマシン(7)内に作成します。

図 3の Step Functions ステートマシン(7)は、イベントのインフラストラクチャライフサイクルにおける進捗状況を表しており、これにより、イベントのデプロイステータスを「一目で」把握することがきます。4つのステップはそれぞれ、別の Step Functions のステートマシンを表しています。これらのサブステートマシンは、イベントのライフサイクルにおける、あるステージのすべての要素をカプセル化するために使用されています。

図 4 は、メインとなる Step Function 内の各ステップの詳細およびカプセル化された Step Functions を示しています。

Detailed definition of the main Step Function

図 4: メインとなるStep Functionsの詳細な定義

メインとなる Step Function は、JSON テキストを入力として受け取り、その入力を最新のプレロール、イベント開始および終了のタイムスタンプなどとともに、内部の各 Step Function に渡します。プレロールタイムスタンプは、インフラストラクチャをデプロイする前に設定可能な遅延時間として機能し、「Timestamp Wait」を介して使用されます。あるライブストリーミングイベントに対するステートマシンの実行は、オーケストレーションを再開する前に、放送イベントのスケジュールされたプレロール時間まで待機します。実行が再開されると、Lambda 関数が DynamoDB テーブルからイベント設定を読み取り、最新のイベント要件が満たされていることを確認します。この仕組みにより、DAZN はインフラストラクチャがデプロイされる瞬間まで変更を加えることができる柔軟性が得られました。

このシンプルなステートマシンは、高度に設定可能で、サードパーティリソースも含めたオーケストレーション、インフラストラクチャの自動テストの実装、ダウンストリームのアクションや通知をトリガーするための外部システムへの呼び出しなど、機能を拡張することが可能です。

動画ストリーミングインフラストラクチャの構築と解体には、いずれも AWS CodeBuild のジョブを使用します。AWS CodeBuild は、ステートマシンフローに処理を返す前に、ビルドコマンドの実行と、実行に長時間かかる可能性のあるスタックをデプロイします。

このような「deploy workflow」(デプロイワークフロー)などいくつかの Step Functions を使用して、さまざまなイベントデプロイの順列と、各々に対応する解体プロセスを定義します。これらによって、イベントがデプロイされる AWS アベイラビリティーゾーンの数などの耐障害性の要件と、グラフィックや広告を挿入するためのインフラストラクチャのプロビジョニングが必要かどうかなどの放送要件が定義されます。このインフラストラクチャは、モジュール式の AWS CDK コンポーネントで定義可能であり、これにより、コンポーネントを複数のデプロイ間で簡単に再利用することができます。

イベントの進行中、ステートマシンはスケジュールされたイベントの終了時刻まで待機します。スポーツの生中継は予定時刻を超えてしまう場合が多く、人間のオペレーターの確認が取れるまで待機する必要があります。イベントの終了時刻に達すると、ステートマシンは、解体を続行すべきかの承認を待つ DynamoDB テーブルをポーリングします。この時点で、実行ワークフローの残りの部分を実行し、イベントリソースを破棄し、親ステートマシンに完了を通知します。

ステートマシンのデプロイは、ビジネスニーズやテクノロジースタックの進化に応じて簡単に適応でき、また、イベントリソースのライフサイクルを柔軟に定義およびオーケストレーションする方法を提供します。また、リトライやリカバリのロジックをカスタマイズする手段も提供されているからこそ、堅牢かつ信頼性の高い、デプロイワークフローを DAZN が構築できるようになったのは重要な点です。

結論

DAZN は、AWS Step Functions のシンプルさと AWS CDK の再利用性のおかげで、複数のワークフロータイプを備えた、イベントベースのオーケストレーションシステムの実用的なプロトタイプを、ほんのわずか数週間で構築することができました。基本的なワークフローを確立できたため、関連するメディアコンポーネントのオーケストレーションに必要なステップを簡単に視覚化することができました。

また、AWS CDK のモジュール性により、イベントのティアリング(重要性)と冗長性の要件に基づいて、さまざまなメディアワークフローを簡単に作成して適応させることができました。ACI/CD パイプラインに統合された AWS CDK は、サービスを複数の環境にセキュアかつ確実にデプロイできます。

AWS Step Functions の柔軟性により、DAZN は同期タスクと非同期タスクの両方を単一のステートマシン内の一連のステップで調整できるうえ、コストは状態遷移時のみ発生します。高価なポーリングメカニズムは不要であり、システムは準備が整った場合のみ、次のステップに進みます。

DAZN がメディアワークフローにイベントベースのオーケストレーターを開発したことは、将来の大きな成長の礎となります。また同社がオンデマンドのクラウドベースワークフローを採用したことで、DAZNのコストと、収益を生み出す事業活動がしっかり合致したことは特筆すべき点です。

以下のブートストラップのサンプルコードを使用して、同様のアーキテクチャを構築できます。

タイムスタンプまで待機する Step Functions の機能を活用したスマートな Cron Job アプリケーション
https://serverlessland.com/workflows/smart-cron-job

AWS Step Functions を使用したモジュール式構築システム
https://serverlessland.com/patterns/sfn-sfn-cdk

サーバーレスワークフローのコレクション
https://serverlessland.com/workflows

SRT / Zixi / RIST / RTP FEC の入力ソースからの AWS 上のライブストリーミング
https://serverlessland.com/patterns/elemental-mediaconnect-medialive-mediapackage

RTP / RTMP のソースからのライブストリーミング
https://serverlessland.com/patterns/elemental-medialive-mediapackage

Amazon CloudFront を使用したコンテンツの大規模ライブストリーミング
https://serverlessland.com/patterns/elemental-mediapackage-cloudfront


参考リンク

AWS Media Services
AWS Media & Entertainment Blog (日本語)
AWS Media & Entertainment Blog (英語)

AWS のメディアチームの問い合わせ先: awsmedia@amazon.co.jp
※ 毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。

翻訳は  BD 山口、SA 石井が担当しました。原文はこちらをご覧ください。