ServerlessVideoのアーキテクチャを深掘りする

このブログ投稿は AWS Lambda と Serverless Advent Calendar 2023 の 22日目です。

AWS Lambda と Serverlessのカレンダー | Advent Calendar 2023 - Qiita

ヤサイブログへの投稿はお久しぶりな状況です...

当方、re:Invent 2023 は現地参加しました。その際にExpoやSessionでServerlessVideoが紹介されるケースがありまして、大変興味を持ちました。

video.serverlessland.com

本エントリーではserverlessVideoのアーキテクチャについて深掘りしてみます。(深掘りしきれていないところもありますがご容赦下さい。🙇‍♂️)

ServerlessVideoとは

ServerlessVideoは、AWS re:Invent 2023で展示されたサーバーレスアーキテクチャを用いた動画ストリーミングアプリケーションで、AWS Step Functions、Amazon EventBridge、AWS Lambda、Amazon ECS、Amazon BedrockなどのAWSサービスが利用されています。

⬆️こちら、どこかで見たことがあるロゴだと思いませんか?そう、serverlesspressoに似ていますよね。serverlesspressoもAWSの各種イベントで展示されることがあり、serverlesspresso ワークショップで独自のserverlesspressoを構築することも可能になっています。

ServerlessVideoの特徴

ServerlessVideoはどんなところに魅力があるのでしょうか。その特徴をチェックしていきます。

特徴その1. プラグインアーキテクチャであること

ServerlessVideoはプラグインアーキテクチャです。プラグインアーキテクチャAWS Step Functions と Amazon EventBridgeによってプラグインによる機能拡張の追加を実現してします。

動画管理のイベントをトリガーとしてPlugin管理サービスが実行され、 各種プラグインが実行される

プラグインは、⬆️の画像にある複数のフックを条件として起動することができます。フックの詳細は以下の通りです。

フック名 フックの説明
preValidate ライブ放送後に映像内容を検証する前のフック
postValidate 映像内容の検証時のフック。検証前に生成したフック情報を参照可能
preMetadata メタデータ生成前に利用するフック
postMetadata メタデータ生成時に利用するフック

ServerlessVideoで実装されている機能の一部は拡張機能で実装されていることが分かります。既存の拡張機能は以下の通りです。

拡張機能 フック 拡張機能の説明
Content Moderation preValidate 不適切・不要・不快なコンテンツかどうかをAmazon Rekognition Videoで分析
Duration preValidate 動画の長さのチェック
Transcribe preMetadata CloudFrontのURLから取得したオブジェクトをS3に転写
Generate Tags postMetadata Bedrockを利用して動画のタグを生成
Generate Title postMetadata Bedrockを利用して動画のタイトルを生成
Leader Board postMetadata ストリームのカウントとストリームの合計時間のリーダーボードを構築
Rollup Stats postMetadata 動画の総数や総時間などの統計情報を取得
Translate postMetadata 異なる言語への翻訳処理

そして、上記のプラグインがEventBridgeによってトリガーされる Plugin Lifecycle Manager によって実行されます。このフックは全てEventBrigeのEventBridgeRuleのパターンによって分類されて実行されているようです。(ここは各イベントパターンの相関的な図が欲しいところです ... )

プラグインにおけるEventBridgeRuleのパターン指定内容

肝心のPlugin Lifecycle ManagerのStep Functionsの処理はASLファイルで書き出されていたので、可視化してみました。可視化した内容はこちら⬇️

すいません、ちょっと半端ないワークフローでびっくらこいた状態です。 見たところ、DynamoDBを状態遷移のデータソースとして、それぞれのフック用の状態遷移グループ(と呼ぶべきですかね?)が定義されているワークフローかなと思いました。

イベント駆動におけるサーバーレスアーキテクチャをふんだんに、これでもかっていうくらい活用していますよね。もうかっこよすぎて惚れます。

特徴その2. サービスが独立してデプロイ可能であること

チャンネル、ダッシュボード、プラグインマネージャー、動画管理などそれぞれのサービスが独立したAWS SAMのテンプレートファイルとして定義されており、それぞれ独立してデプロイ可能になっています。これは、モノレポのような思想なのでしょうか?とても素晴らしいです。カルチャーショックです。

コード上も独立したサービスとして管理

詳しくはServerless LandのPDFをご覧ください!!

それぞれのサービスの説明や、全体アーキテクチャ図、プラグインアーキテクチャの説明などの記載がありますので、ご興味がありましたら是非ご覧ください!コンピューティングリソースをLambdaとECS Fargate Taskで使い分けてるのも重要なポイントですね!!

serverlessland.com

ServerlessVideo 全体アーキテクチャ

ServerlessVideoに私が期待すること

私は個人用AWSアカウントにデプロイして利用したいのですよ! ですから、私はServerlessVideoについて以下の事柄を期待します!!

期待すること1. フロントエンドのコードも閲覧したい!

バックエンドは公開されていますが、今のところ(2023年12月22日時点)はAmplifyで構築されたフロントエンドのコードってないですよね?是非ともフロントエンドのコードも見てみたいです!!

期待すること2. serverlesspresso と同じくワークショップコンテンツが欲しい!

自分だけのServerlessVideoを構築できるワークショップが欲しいですね!serverlesspressoはあるので是非とも同じようなワークショップを期待します!!AWS様お願いします! 🙇‍♂️

まとめ

ServerlessVideoは可能性に満ちあふれています。AWSのこういった楽しい取り組みは本当に好きです。これからもServerlessVideoの動向を追っていきたいと思います!以上です!