web-dev-qa-db-ja.com

ビデオおよび画像処理用のAmazon Lambda?

私がアーキテクチャを構築しているサービスには、ビデオ処理部分があります。基本的に、一部の人々は、高解像度のフレームに分割されるビデオ(S3に保存)をアップロードできます。これらの高解像度フレームから、派生画像(サムネイル、スプライト)が作成され、これらすべてがS3に保存されます。

私の質問は、ビデオ処理スクリプトをどこでどのように実行する必要があるかです。 Lambdaを使用したいのですが、その制限( 0秒のタイムアウトと512 MBのディスクストレージ )が許可するかどうかはわかりませんビデオは最大数GBになることがあります。

私が現在考えている解決策は次のとおりです。

  • ストリームを使用してS3からビデオを読み取る(したがって、完全にコピーする必要はありません)
  • ビデオをフレームに変換し、直接S3にアップロードします(ストレージがフレームでいっぱいにならないようにする必要もあります)
  • 個別に読み取るか、S3からフレームをチャンクして、それらを使用してサムネイルとスプライトを生成し、S3にアップロードします。私のLambdaがS3バケットと同じリージョンにある場合でも、これにかかる時間について少し心配しています。

これが最善の解決策だと思いますか?もっと簡単なものを考えられますか?または、標準のEC2インスタンスで処理を実行する方が良いと思いますか(おそらくSQSのようなキューイングシステムが途中にある場合)。

ありがとう!

5
christophetd

最後に、有効なユースケース(大きなビデオなど)がLambdaの制限(時間やディスクストレージ)に到達するようにする必要があります。

ステップを小さく、単一タスクのチャンクに減らす必要があります。次に例を示します。

  • ビデオをフレームに変換
  • フレームをサムネイルに変換する
  • 等.

小さな各タスクを個別に評価します。最小/最大/平均ファイルサイズを決定し、最小/最大/平均処理時間を計算します。ラムダが適切であれば、それを選択します。それ以外の場合は、EC2インスタンスを使用して、キューからのアイテムを処理できます(SQSを使用するなど)。

2
Matt Houser

あなたがやろうとしていることと、それが適合するかどうかに応じて、あなたはmightAWSを見つけることができます Elastic Transcoder ビデオ処理サービスすぐに使用できるソリューションを提供します。それは確かに提供の一部としてサムネイル生成をリストします。

1
timday

自分でロールする場合は、 Amazon SWF を試すことをお勧めします。これは、以前にビデオ処理ワークフローを構築するために使用したためです。

別の答えが提案されているように、各ステップを小さな単一タスクアクティビティに分割し、それらをワークフローにまとめる必要があります。その後、EC2または任意の場所でワークフローを実行できます。

1
Marc Jeanson