So, why not write to a shared wrapper/facade?
If you split the interaction API out to an interface detailing actual program interaction with the service, then write an s3 backend and an FS backend. Then you could plug in any backend as desired and write agnostic application code.
Personally I end up there anyways testing and specifying the third party failure modes.
What if you need it because you are using a third party application that requires an s3 api? Or you want to test your code that interacts with an s3 API?