Google Cloud Storage is good enough to implement locks all by itself: https://reddit.com/r/golang/comments/t52d4f/gmutex_a_global_...
Doesn't S3 provide primitives to do the same? At least since moving to strong read-after-write consistency?
PS: I wrote the above package. Happy to answer questions about it.