Tigris Global Object Storage
Tigris is a globally caching, S3-compatible object storage service built on Fly.io infrastructure.
Objects in Tigris are stored close to the region where they’re written. Then, when requested, objects are cached close to the requesting user. This cache is intelligently managed by Tigris based on global traffic patterns. This behavior offers CDN-like behavior with zero configuration required.
Learn more from their service overview and architecture docs.
Use Tigris with your framework
Language- and framework-specific guides for setting up Tigris:
Create and manage a Tigris storage bucket
Creating and managing storage buckets happens exclusively via the Fly CLI. Install it, then sign up for a Fly account.
Running the following command in a Fly.io app context – inside an app directory or specifying -a yourapp
– will automatically set secrets on your app.
fly storage create
? Select Organization: fly-ephemeral (fly-ephemeral)
? Choose a name, use the default, or leave blank to generate one:
Your project (summer-grass-2004) is ready.
Set one or more of the following secrets on your target app.
BUCKET_NAME: summer-grass-2004
AWS_ENDPOINT_URL_S3: https://fly.storage.tigris.dev
AWS_ACCESS_KEY_ID: tid_xxxxxx
AWS_SECRET_ACCESS_KEY: tsec_xxxxxx
Public buckets
By default, buckets are private. If you need to serve public assets like images or JavaScript files, create a public bucket:
fly storage create --public
You can also make a public bucket private.
fly storage update mybucket --private
Currently, buckets must be public or private. ACL settings will be ignored by the Tigris API.
Migrating to Tigris with shadow buckets
A shadow bucket is an existing S3 (or compatible) bucket, assigned to your Tigris bucket via flyctl
.
Shadow buckets enable transparent copying and writing of objects as they are requested or uploaded. This is helpful for a few scenarios, like:
- Avoiding egress fees from large data migrations
- Avoiding downtime by serving requests from Tigris while running a data migration
- Testing Tigris global cache performance
- Testing Tigris features with the option to switch back to your current provider
How shadow buckets work
Tigris follows this logic when a shadow bucket is set:
- If a requested object is present in Tigris, it’s served immediately
- If not present, Tigris fetches it from the shadow bucket and stores it in a region close to the requesting user
- Subsequent requests are served from Tigris and cached in the requesting user’s region
- Written objects are stored in Tigris close to the uploading user’s region
- Optionally, written objects are replicated to the shadow bucket
- Deleted objects are removed from both the Tigris and shadow bucket
Create a new bucket with a shadow bucket
You must specify all shadow bucket attributes, including the endpoint and region. Check your provider docs to find these values. Here’s the AWS S3 list of regions and endpoints.
flyctl storage create -n mybucket -o myorg --shadow-access-key 123 --shadow-secret-key abc --shadow-endpoint https://s3.us-east-1.amazonaws.com --shadow-region us-east-1 --shadow-write-through
Add or remove a shadow bucket on an existing Tigris bucket
You can also add and remove shadow buckets from existing Tigris buckets.
flyctl storage update mybucket --shadow-access-key 123 --shadow-secret-key abc --shadow-endpoint https://s3.us-east-1.amazonaws.com --shadow-region us-east-1
flyctl storage update mybucket --clear-shadow
shadow-write-through
ensures that writes to Tigris buckets are replicated to the shadow bucket.
The Tigris web console
To view more details about your buckets, sign in to the Tigris web console.
flyctl storage dashboard <bucket_name>
Or, visit your organization-level overview for billing and organization settings:
flyctl storage dashboard --org <org_name>
List your buckets
Get a list of all of your Tigris buckets.
flyctl storage list
NAME ORG
js-storage-1 fly-ephemeral
late-surf-5384 fly-ephemeral
Delete a Tigris bucket
Deleting can’t be undone. Empty buckets can’t be deleted without the --force
option.
fly storage destroy late-surf-5384
Destroying a Tigris bucket is not reversible.
? Destroy Tigris bucket late-surf-5384? Yes
Your Tigris bucket late-surf-5384 was destroyed
Pricing and Billing
Tigris buckets are billed by usage with no up-front costs. Check the official Tigris Pricing page for details.
AWS API compatibility
Check out the Tigris docs on compatibility: https://www.tigrisdata.com/docs/api/s3
Tigris also supports the following:
- Pre-signed URLs for secure download and upload
- Setting HTTP headers on objects such as
Cache-Control