

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

# Amazon Kinesis Video Streamsと AWS Fargate を使用してビデオ処理パイプラインを構築する
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate"></a>

*Piotr Chotkowski、Pushparaju Thangavel (Amazon Web Services)*

## 概要
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-summary"></a>

[Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/) と [AWS Fargate](https://aws.amazon.com/fargate) を使用してビデオストリームからフレームを抽出し、さらに処理できるように [Amazon Simple Storage Service (Amazon S3](https://aws.amazon.com/s3/)) にイメージファイルとして保存します。 

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

## 前提条件と制限事項
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ Java SE Development Kit (JDK) 11 をインストール済み
+ [Apache Maven](https://maven.apache.org/) をインストール済み
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) をインストール済み
+ [AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) バージョン 2
+ [Docker](https://docs.docker.com/get-docker/) (AWS Fargate タスク定義で使用する Docker イメージを構築するために必要) をインストール済み

**制限事項**

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

**製品バージョン**
+ このパターンは AWS CDK バージョン 1.77.0 でテストされました ([AWS CDK バージョン](https://docs.aws.amazon.com/cdk/api/latest/versions.html)を参照)
+ JDK 11
+ AWS CLI バージョン 2

## アーキテクチャ
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon Kinesis Video Streams
+ AWS Fargate タスク
+ Amazon Simple Queue Service (Amazon SQS) キュー
+ Amazon S3 バケット

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

![\[Kinesis Video Streams と Fargate を使用してビデオ処理パイプラインを構築するためのアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/images/a60e585f-27be-4dd6-897b-c38adf1d283f.png)


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

**自動化とスケール**

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

## ツール
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-tools"></a>

**ツール**
+ [AWS CDK](https://aws.amazon.com/cdk/) は、TypeScript、JavaScript、Python、Java、C\$1/.Net などのプログラミング言語を使用してクラウドインフラストラクチャとリソースを定義するためのソフトウェア開発フレームワークです。
+ [Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/) は、デバイスから AWS クラウドへの動画のライブストリーミングに使用したり、あるいはリアルタイムの動画処理やバッチ指向の動画分析のためのアプリケーションを構築できる完全管理の AWS のサービスです。
+ [AWS Fargate](https://aws.amazon.com/fargate) は、コンテナ用のサーバーレスコンピューティングエンジンです。Fargate を使用すると、サーバーのプロビジョニングと管理が不必要になるため、アプリケーションの開発への集中が容易になります。
+ [Amazon S3](https://aws.amazon.com/s3/) は、スケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するオブジェクトストレージサービスです。
+ [Amazon SQS](https://aws.amazon.com/sqs/) は、完全マネージド型のメッセージキューイングサービスであり、マイクロサービス、分散システム、およびサーバーレスアプリケーションのデカップリングとスケーリングを容易にします。

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

## エピック
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-epics"></a>

### インフラストラクチャをデプロイする
<a name="deploy-the-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Docker デーモンを開始します。 | ローカルシステムで Docker デーモンを開始します。AWS CDK は Docker を使用して AWS Fargate タスクの使用イメージを構築します。次の手順に進む前に Docker を実行する必要があります。 | 開発者、DevOps エンジニア | 
| プロジェクトをビルドします。 | `frame-splitter-code` サンプルアプリケーション (添付) をダウンロードし、ローカルマシンのフォルダに抽出します。インフラストラクチャをデプロイする前に、[Java Maven](https://maven.apache.org/) プロジェクトをビルドする必要があります。コマンドプロンプトで、プロジェクトのルートディレクトリに移動し、次のコマンドを実行してプロジェクトをビルドします。 <pre>mvn clean install</pre> | 開発者、DevOps エンジニア | 
| AWS CDK をブートストラップします。 | (AWS CDK を初めて使用するユーザーのみ) AWS CDK を初めて使用する場合は、AWS CLI コマンドを実行して環境をブートストラップする必要があります。<pre>cdk bootstrap --profile "$AWS_PROFILE_NAME" </pre>`$AWS_PROFILE_NAME` は、AWS 認証情報から AWS プロファイルの名前を保持します。または、このパラメータを削除してデフォルトのプロファイルを使用します。詳細については、「[AWS CDK ドキュメント](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)」を参照してください。 | 開発者、DevOps エンジニア | 
| AWS CDK スタックをデプロイします。 | このステップでは、必要なインフラストラクチャリソース (SQS キュー、S3 バケット、AWS Fargate タスク定義) を AWS アカウントで作成し、AWS Fargate タスクに必要な Docker イメージを構築して、アプリケーションをデプロイします。　 コマンドプロンプトで、プロジェクトのルートディレクトリに移動し、次のコマンドを実行します。<pre>cdk deploy --profile "$AWS_PROFILE_NAME" --all </pre>`$AWS_PROFILE_NAME` は、AWS 認証情報から AWS プロファイルの名前を保持します。または、このパラメータを削除してデフォルトのプロファイルを使用します。デプロイを確認します。CDK デプロイ出力の **QueueUrl** と **バケット** の値を書き留めておきます。これらは後のステップで必要になります。AWS CDK はアセットを作成し、AWS アカウントにアップロードして、すべてのインフラストラクチャリソースを作成します。リソースの作成プロセスは、[AWS CloudFormation コンソールで確認できます](https://console.aws.amazon.com/cloudformation/)。詳細については、[AWS CloudFormation のドキュメント](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)と [AWS CDK のドキュメント](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#hello_world_tutorial_deploy) を参照してください。 | 開発者、DevOps エンジニア | 
| ビデオストリームを作成します。 | このステップでは、ビデオ処理の入力ストリームとして機能する Kinesis ビデオストリームを作成します。AWS CLI がインストールされ、設定されていることを確認します。AWS CLI で、以下の手順を実行します。<pre>aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24" </pre>`$AWS_PROFILE_NAME` は AWS 認証情報の AWS 構成ファイルの名前を保存します(または、デフォルトの構成ファイルを使用するには、このパラメータを削除します)。`$STREAM_NAME` は任意の有効なストリーム名です。 代わりに、Kinesis コンソールを使用して「[Kinesis ビデオストリームのドキュメント](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html#gs-createstream-console)」に記載されている手順に従ってKinesis Video Streams を作成することもできます。作成したストリームの AWS リソースネーム (ARN) を書き留めてください。後で必要になります。 | 開発者、DevOps エンジニア | 

### 例の実行
<a name="run-an-example"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 動画をストリームにアップロードします。 | サンプル `frame-splitter-code` アプリケーションのプロジェクトフォルダで、`src/test/java/amazon/awscdk/examples/splitter` フォルダにある `ProcessingTaskTest.java` ファイルを開きます。`profileName`** **および `streamName`** **変数を、前のステップで使用した値に置き換えます。前のステップで作成した Kinesis ビデオストリームにサンプルビデオをアップロードするには、以下の手順を実行します。 <pre>amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test</pre>代わりに、「[Kinesis ビデオストリームのドキュメント](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk.html)」に記載されている方法のいずれかを使用して動画をアップロードすることもできます。 | 開発者、DevOps エンジニア | 
| ビデオ処理を開始します。 | これで、Kinesis ビデオストリームへのビデオのアップロードが完了したので、処理を開始できます。処理ロジックを開始するには、AWS CDK がデプロイ中に作成した SQS キューに詳細を含むメッセージを送信する必要があります。　 AWS CLI を使用してメッセージを送信するには、以下の手順を実行してください。<pre>aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE </pre>ここで、`$AWS_PROFILE_NAME` は AWS 認証情報から AWS 構成ファイルの名前を保存します (デフォルトのプロファイルを使用するには、このパラメータを削除します)。`QUEUE_URL` は AWS CDK 出力の **QueueUrl** 値、`MESSAGE` は次の形式の JSON 文字列です： <pre>{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }</pre>ここで、`STREAM_ARN` は前の手順で作成したビデオストリームの ARN、`BUCKET_NAME` は AWS CDK 出力の**バケット**値です。 このメッセージを送信すると、動画処理が開始されます。または、「[Amazon SQS ドキュメント](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-send-messages.html)」で説明されているように、Amazon SQS コンソールを使用してメッセージを送信することもできます。 | 開発者、DevOps エンジニア | 
| ビデオフレームの画像を表示します。 | 結果の画像は S3 出力バケット `s3://BUCKET_NAME/test-output` で確認できます。ここで、`BUCKET_NAME` は AWS CDK 出力からの**バケット**値です。 | 開発者、DevOps エンジニア | 

## 関連リソース
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-resources"></a>
+ [AWS SDK ドキュメント](https://docs.aws.amazon.com/cdk/latest/guide/home.html)
+ [「AWS CDK API リファレンス」](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html)
+ [「AWS CDK 入門ワークショップ」](https://cdkworkshop.com/)
+ [「Amazon Kinesis Video Streams のドキュメント」](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html)
+ [例: SageMaker を使用してビデオストリーム内のオブジェクトを識別する](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-sagemaker.html)
+ [例: Kinesis Video Streams フラグメントの解析およびレンダリング](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-renderer.html)
+ 「[Amazon Kinesis Video Streams と Amazon SageMaker を使用してライブビデオをスケーリングし、リアルタイムで分析する](https://aws.amazon.com/blogs/machine-learning/analyze-live-video-at-scale-in-real-time-using-amazon-kinesis-video-streams-and-amazon-sagemaker/)」 (AWS 機械学習 ブログ記事)
+ 「[AWS Fargate のご利用開始にあたって](https://aws.amazon.com/fargate/getting-started/)」

## 追加情報
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-additional"></a>

**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`)。これらは手動で削除してください。

## アタッチメント
<a name="attachments-9d1442c2-f3ee-47fd-8cce-90d9206ce4d4"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/attachments/attachment.zip)」