2011-12-29 9 views
14

可能性の重複:
Notification of new S3 objectsユーザーがS3バケットにアップロードしたときに通知を受け取りますか?

私たちは、S3上のユーザーデータを保存するアプリを持っています。アップロードを処理するアプリケーションの部分は、データを処理する部分から切り離されています。場合によっては、アプリを一切経由せずにS3にデータを直接アップロードすることもできます(S3アカウントを持っていて、資格情報を提供している場合に起こります)。

S3バケットの内容が変わるたびに通知を受けることはできますか?何とか「このファイルが追加/更新/削除されました:foo」というメッセージが送信される可能性があります。

短く、バケットが最後に更新されたことを伝えるポーリングができるタイムスタンプがありますか?

私がこれらのことを行うことができない場合、唯一の選択肢はバケット全体をクロールして変更を探すことです。これは遅くて高価になります。

答えて

17

アップデート2014から11:

アランIllingはコメントで指摘するように、AWSは今SQSに自動的に転送することができるSNSへのS3からの通知を、サポートしています。http://aws.amazon.com/blogs/aws/s3-event-notification/

S3にも送ることができます独自のコードを直接実行するAWS Lambdaへの通知。 S3-> SNSの通知を予測

オリジナルの応答:

Amazonがこれをサポートしている場合、彼らはオブジェクトがバケットに追加された通知を送信するためにSNSを使用します。ただし、S3およびSNSでサポートされている唯一のバケットイベントは、Redundancy Redundancy Storage(RRS)オブジェクトのすべてのレプリカを失ったことをAmazon S3が検出したときに通知し、そのオブジェクトに対する要求を処理できなくなることです。

ここS3でサポートされているSNSのイベントのドキュメントです:ドキュメントが書かれている方法に基づいて

http://docs.amazonwebservices.com/AmazonS3/latest/dev/NotificationHowTo.html

、Amazonが追加する他の通知イベントのためのアイデアを持っているように見えます(新しいキーがいつ追加されたかを知るためのあなたのアイデアのように)。

Amazonで直接サポートされていないと仮定すると、オブジェクトをS3にアップロードするS3クライアントは通知をトリガする必要があります。そうでない場合は、何らかのポーリングを行う必要があります。

S3へのアップロードのカスタムイベント通知は、処理にほぼリアルタイムでアップデートしたい場合はSNSを使用して、通知を積み重ねて処理する場合はSQSを使用して行うことができますあなた自身のペースでキューの

ポーリングしている場合は、たとえば「未処理/ ...」というプレフィックスとそれに続く固有キーをクライアントにアップロードさせることで、リクエストする必要のあるキーの数を減らすことができます。ポーリングソフトウェアは、その接頭辞で始まるS3キーだけを照会することができます。処理する準備ができたら、キーを「処理中/ ...」に変更し、後で「処理済み/ ...」などに変更することができます。 S3のオブジェクトは現在、S3によって実行されるcopy + delete操作によって名前が変更されます。

+0

オブジェクトのボリュームが小さい場合は、名前の接頭辞が問題なく機能します。大量のオブジェクトの場合、実際にはS3の処理速度が低下します。 S3はバケット名/オブジェクトキーに基づいてデータを内部的に分割します。同じ接頭辞を持つキーは、同じパーティション内に存在する可能性が高くなります。アップロードスループットを高めるには、文字列の先頭でオブジェクトキーを変更しないようにする必要があります。詳細はこちらをご覧ください:http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html – dlaidlaw

+0

@dlaidlaw:アマゾンによって記述されているように、簡単にキーの特別なプレフィックス配布がなくても1秒あたり100リクエスト以上のバーストを処理できます。着信キューを処理するよりも早い場合は、プレフィックスの代わりに「未処理」バケットを使用するだけです。しかし、その速度で並列プロセッサを使用する可能性が高くなります。その時点で、ポーリングされている未処理ファイルの単一のリストを持つことの提案(どのスレッドがどのファイルを処理しているかはどのように分かりますか? –

+4

非常に高いスループットのために、S3のファイルにURIを含むメッセージをSQSに書き込みます。複数のスレッドがSQSキューを処理できます。はい、SQSメッセージの作成にはオーバーヘッドがありますが、それは必要であり、S3にファイルを送信するすべてのスレッドに分散されています。 AmazonでSNSメッセージを送信するフラグがS3で作成されている場合は、SQSキューをサブスクライブしてスレッド間で負荷を分散することができますが、それまでは独自のメッセージをSNSまたはSQS。 – dlaidlaw

関連する問題