External storage for blobs in ODK Central

We've started doing some design work for this led by @alxndrsn.

Our current thinking is to use the S3 API which would work with many blob storage solutions such as minio for local deployments or Google Cloud Storage.

Some preliminary questions for those interested in this (@abhinav_sinha, @ravish_mallya, @Saad, @TobiasMcNulty ):

  • What are your expectations around automated migration? Is it a step you could take care of performing and validating yourself if we provide the necessary APIs? If not, would it be ok for this migration to be a blocking part of bringing a server back up (could take a while)? And/or would you be open to existing blobs staying in the DB and new blobs being written to storage?
  • Would it be acceptable for there to be no path back to storing blobs in the DB? In other words, if you configure external storage, you wouldn't be able to later change your mind and go back to storing blobs in the db.