View a markdown version of this page

Amazon Kinesis Video Streamsと AWS Fargate を使用してビデオ処理パイプラインを構築する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Kinesis Video Streamsと AWS Fargate を使用してビデオ処理パイプラインを構築する

Piotr Chotkowski、Pushparaju Thangavel (Amazon Web Services)

概要

Amazon Kinesis Video Streams と AWS Fargate を使用してビデオストリームからフレームを抽出し、さらに処理できるように Amazon Simple Storage Service (Amazon S3) にイメージファイルとして保存します。 

このパターンは Java Maven プロジェクト形式でサンプルアプリケーションを提供します。このアプリケーションは、AWS Cloud Development Kit (AWS CDK) を使用して AWS インフラストラクチャを定義します。フレーム処理ロジックとインフラストラクチャ定義は Java プログラミング言語で記述されています。このサンプルアプリケーションを、独自のリアルタイムビデオ処理パイプラインを開発したり、機械学習パイプラインのビデオ前処理ステップを構築するための基礎として使用できます。 

前提条件と制限事項

前提条件

制限事項

このパターンは、概念実証として、または今後の開発の基礎となることを目的としています。本稼働環境では、現行の形式を使用しないでください。

製品バージョン

  • このパターンは AWS CDK バージョン 1.77.0 でテストされました (AWS CDK バージョンを参照)

  • JDK 11

  • AWS CLI バージョン 2

アーキテクチャ

ターゲットテクノロジースタック

  • Amazon Kinesis Video Streams

  • AWS Fargate タスク

  • Amazon Simple Queue Service (Amazon SQS) キュー

  • Amazon S3 バケット

ターゲットアーキテクチャ

Kinesis Video Streams と Fargate を使用してビデオ処理パイプラインを構築するためのアーキテクチャ。

ユーザーは Kinesis ビデオストリームを作成し、動画をアップロードして、入力 Kinesis ビデオストリームと出力 S3 バケットの詳細を含む JSON メッセージを SQS キューに送信します。コンテナ内でメインアプリケーションを実行している AWS Fargate は、SQS キューからメッセージを取得し、フレームの抽出を開始します。各フレームはイメージファイルに保存され、ターゲット S3 バケットに格納されます。

自動化とスケール

サンプルアプリケーションは、単一の AWS リージョン内で水平方向と垂直方向の両方にスケーリングできます。水平スケーリングは、SQS キューから読み取る、デプロイされた AWS Fargate タスクの数を増やすことで実現できます。垂直スケーリングは、アプリケーションのフレーム分割スレッドと画像公開スレッドの数を増やすことで実現できます。これらの設定は、AWS CDK の QueueProcessingFarGateService リソースの定義で環境変数としてアプリケーションに渡されます。AWS CDK スタックのデプロイの性質上、このアプリケーションは追加作業なしで複数の AWS リージョンとアカウントにデプロイできます。

ツール

ツール

  • AWS CDK は、TypeScript、JavaScript、Python、Java、C#/.Net などのプログラミング言語を使用してクラウドインフラストラクチャとリソースを定義するためのソフトウェア開発フレームワークです。

  • Amazon Kinesis Video Streams は、デバイスから AWS クラウドへの動画のライブストリーミングに使用したり、あるいはリアルタイムの動画処理やバッチ指向の動画分析のためのアプリケーションを構築できる完全管理の AWS のサービスです。

  • AWS Fargate は、コンテナ用のサーバーレスコンピューティングエンジンです。Fargate を使用すると、サーバーのプロビジョニングと管理が不必要になるため、アプリケーションの開発への集中が容易になります。

  • Amazon S3 は、スケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するオブジェクトストレージサービスです。

  • Amazon SQS は、完全マネージド型のメッセージキューイングサービスであり、マイクロサービス、分散システム、およびサーバーレスアプリケーションのデカップリングとスケーリングを容易にします。

コード

  • サンプルアプリケーションプロジェクト (frame-splitter-code.zip) の.zip ファイルが添付されます。 

エピック

タスク説明必要なスキル

Docker デーモンを開始します。

ローカルシステムで Docker デーモンを開始します。AWS CDK は Docker を使用して AWS Fargate タスクの使用イメージを構築します。次の手順に進む前に Docker を実行する必要があります。

開発者、DevOps エンジニア

プロジェクトをビルドします。

frame-splitter-code サンプルアプリケーション (添付) をダウンロードし、ローカルマシンのフォルダに抽出します。インフラストラクチャをデプロイする前に、Java Maven プロジェクトをビルドする必要があります。コマンドプロンプトで、プロジェクトのルートディレクトリに移動し、次のコマンドを実行してプロジェクトをビルドします。 

mvn clean install
開発者、DevOps エンジニア

AWS CDK をブートストラップします。

(AWS CDK を初めて使用するユーザーのみ) AWS CDK を初めて使用する場合は、AWS CLI コマンドを実行して環境をブートストラップする必要があります。

cdk bootstrap --profile "$AWS_PROFILE_NAME"

$AWS_PROFILE_NAME は、AWS 認証情報から AWS プロファイルの名前を保持します。または、このパラメータを削除してデフォルトのプロファイルを使用します。詳細については、「AWS CDK ドキュメント」を参照してください。

開発者、DevOps エンジニア

AWS CDK スタックをデプロイします。

このステップでは、必要なインフラストラクチャリソース (SQS キュー、S3 バケット、AWS Fargate タスク定義) を AWS アカウントで作成し、AWS Fargate タスクに必要な Docker イメージを構築して、アプリケーションをデプロイします。  コマンドプロンプトで、プロジェクトのルートディレクトリに移動し、次のコマンドを実行します。

cdk deploy --profile "$AWS_PROFILE_NAME" --all

$AWS_PROFILE_NAME は、AWS 認証情報から AWS プロファイルの名前を保持します。または、このパラメータを削除してデフォルトのプロファイルを使用します。デプロイを確認します。CDK デプロイ出力の QueueUrl と バケット の値を書き留めておきます。これらは後のステップで必要になります。AWS CDK はアセットを作成し、AWS アカウントにアップロードして、すべてのインフラストラクチャリソースを作成します。リソースの作成プロセスは、AWS CloudFormation コンソールで確認できます。詳細については、AWS CloudFormation のドキュメントと AWS CDK のドキュメント を参照してください。

開発者、DevOps エンジニア

ビデオストリームを作成します。

このステップでは、ビデオ処理の入力ストリームとして機能する Kinesis ビデオストリームを作成します。AWS CLI がインストールされ、設定されていることを確認します。AWS CLI で、以下の手順を実行します。

aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24"

$AWS_PROFILE_NAME は AWS 認証情報の AWS 構成ファイルの名前を保存します(または、デフォルトの構成ファイルを使用するには、このパラメータを削除します)。$STREAM_NAME は任意の有効なストリーム名です。 

代わりに、Kinesis コンソールを使用して「Kinesis ビデオストリームのドキュメント」に記載されている手順に従ってKinesis Video Streams を作成することもできます。作成したストリームの AWS リソースネーム (ARN) を書き留めてください。後で必要になります。

開発者、DevOps エンジニア
タスク説明必要なスキル

動画をストリームにアップロードします。

サンプル frame-splitter-code アプリケーションのプロジェクトフォルダで、src/test/java/amazon/awscdk/examples/splitter フォルダにある ProcessingTaskTest.java ファイルを開きます。profileName および streamName 変数を、前のステップで使用した値に置き換えます。前のステップで作成した Kinesis ビデオストリームにサンプルビデオをアップロードするには、以下の手順を実行します。 

amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test

代わりに、「Kinesis ビデオストリームのドキュメント」に記載されている方法のいずれかを使用して動画をアップロードすることもできます。

開発者、DevOps エンジニア

ビデオ処理を開始します。

これで、Kinesis ビデオストリームへのビデオのアップロードが完了したので、処理を開始できます。処理ロジックを開始するには、AWS CDK がデプロイ中に作成した SQS キューに詳細を含むメッセージを送信する必要があります。  AWS CLI を使用してメッセージを送信するには、以下の手順を実行してください。

aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE

ここで、$AWS_PROFILE_NAME は AWS 認証情報から AWS 構成ファイルの名前を保存します (デフォルトのプロファイルを使用するには、このパラメータを削除します)。QUEUE_URL は AWS CDK 出力の QueueUrl 値、MESSAGE は次の形式の JSON 文字列です: 

{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }

ここで、STREAM_ARN は前の手順で作成したビデオストリームの ARN、BUCKET_NAME は AWS CDK 出力のバケット値です。 

このメッセージを送信すると、動画処理が開始されます。または、「Amazon SQS ドキュメント」で説明されているように、Amazon SQS コンソールを使用してメッセージを送信することもできます。

開発者、DevOps エンジニア

ビデオフレームの画像を表示します。

結果の画像は S3 出力バケット s3://BUCKET_NAME/test-output で確認できます。ここで、BUCKET_NAME は AWS CDK 出力からのバケット値です。

開発者、DevOps エンジニア

関連リソース

追加情報

IDE の選択

お気に入りの Java IDE を使用してこのプロジェクトを構築し、探索することをお勧めします。 

クリーンアップ

この例を実行した後、追加の AWS インフラストラクチャにコストが発生しないように、デプロイしたリソースをすべて削除してください。 

インフラストラクチャとビデオストリームを削除するには、AWS CLI で次の 2 つのコマンドを使用します。

cdk destroy --profile "$AWS_PROFILE_NAME" --all
aws kinesisvideo --profile "$AWS_PROFILE_NAME" delete-stream --stream-arn "$STREAM_ARN"

代わりに、AWS CloudFormation コンソールを使用して AWS CloudFormation スタックを削除し、Kinesis コンソールを使用して Kinesis ビデオストリームを削除することで、リソースを手動で削除することもできます。ただし、cdk destroy は出力 S3 バケットや Amazon Elastic Container Registry (Amazon ECR) リポジトリ内のイメージを削除しないことに注意してください (aws-cdk/assets)。これらは手動で削除してください。

アタッチメント

このドキュメントに関連付けられている追加のコンテンツにアクセスするには、添付ファイルをダウンロードして解凍します。zip