File storage encompasses all the services that interact with AWS S3.
Storage profiles are a way for us to determine where to read and store files. For now, the profiles are:
defaultwhich has purposes that point to buckets inus-eastandus-westgovcloudwhich has buckets inus-gov-westapse2which has buckets inap-southeast-2
As of now, the only place storage purposes are used are in the main Procore app. These are strings that along with a storage profile represent a bucket in a region.
Binder is an elixir/pheonix app that takes a bucket, region, and key and returns a presigned url.
Binder URLs are served in production through the domain storage.procore.com.
Binder is able to return a url to any object in any bucket that the credentials allow.
Image processing is perhaps the largest service utilizing our AWS buckets.
The services include creating thumbnails, merging PDFs, creating specifications, comparing images, and others.
Image processing mainly uses our general buckets and thumbnail buckets.
Ecrion handles creating PDFs. Ecrion uses the buckets specified by the ecrion purpose.
Our zip lambda takes drawing tiles and creats a zip of those tiles. It mainly uses buckets specified by the general purpose.
Our Nginx zip service works by taking multiple shortened s3 urls and returning a zip of those files.
Procore Sync is a desktop client that syncs desktop files to our web services.
It uses the buckets specified by the general purpose.
The architecture is largely a hub and spoke model, where the procore/procore backend will act as a liason between apps (mobile, web, windows) and the services.
