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:
default
which has purposes that point to buckets inus-east
andus-west
govcloud
which has buckets inus-gov-west
apse2
which 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.