S3 オブジェクト「強力な整合性」の動作について教えてください
困っていること
S3 を利用したアプリケーションを起動しています。
処理(a)がオブジェクトを更新中に、別の処理(b)が同じオブジェクトを読み取った場合、処理(b)が読み取る結果は、処理 (a) が更新後になるか教えてください。
また、ほぼ同時に同じオブジェクトへの書き込みが発生した場合はどうなるのか教えてください。
どう対応すればいいの?
処理(a)処理(b)について
新しいオブジェクトの書き込みや既存のオブジェクトの上書きリクエストが成功した後、読み込みリクエストはオブジェクトの最新版を受け取ることが想定される動作となります。
今回の場合であれば、処理 (b) が処理(a)更新後のオブジェクトを受け取ることが想定されます。
本日から、S3 の GET、PUT、LIST 操作のすべて、およびオブジェクトタグ、ACL、またはメタデータを変更する操作に強力な整合性が適用されます。書き込む内容をすぐさま読み取ることができるようになり、LIST の結果はバケットの内容を正確に反映するようになります。これは、既存および新規の S3 オブジェクトすべてに適用され、全リージョンで機能し、追加料金なしでご利用いただけます! パフォーマンスへの影響はなく、必要に応じてオブジェクトを毎秒何百回でも更新でき、グローバルな依存関係はありません。
※参考情報(P24)
ほぼ同時に同じオブジェクトへの書き込みが発生した場合
同時書き込み時におけるオブジェクトロック機能はないため、最新のタイムスタンプを持つ書き込みのリクエストが優先されます。
システム要件としてどの程度の性能(整合性)が必要か確認され、同時書き込みなどの処理が多く発生する場合は、アプリケーション側で制御することをご検討ください。
注記 ● Amazon S3 は、同時書き込みのオブジェクトロックをサポートしていません。同じキーに対して 2 つの PUT リクエストが同時に行われた場合、最新のタイムスタンプを持つリクエストが優先されます。これが問題になる場合は、アプリケーション内にオブジェクトロックメカニズムを構築する必要があります。