Conjure.Storage.Tigris (Conjure v0.1.1-alpha)

View Source

Fly.io Tigris object storage backend.

Tigris is Fly.io's globally-distributed, S3-compatible object storage. It automatically replicates data to regions close to your Fly Machines, providing low-latency access worldwide.

Fly.io Setup

# Create a Tigris bucket for your Fly app
fly storage create conjure-sessions

# Credentials are automatically injected as env vars:
# - AWS_ACCESS_KEY_ID
# - AWS_SECRET_ACCESS_KEY
# - AWS_ENDPOINT_URL_S3
# - BUCKET_NAME

Options

  • :bucket - Bucket name (default: BUCKET_NAME env var)
  • :endpoint - Tigris endpoint (default: AWS_ENDPOINT_URL_S3 env var)
  • :access_key_id - Access key (default: AWS_ACCESS_KEY_ID env var)
  • :secret_access_key - Secret key (default: AWS_SECRET_ACCESS_KEY env var)
  • :cache_path - Local cache directory (default: FLY_VOLUME_PATH or tmp_dir)
  • :region - Region hint for read affinity (default: FLY_REGION env var)
  • :prefix - Key prefix for objects (default: "sessions/")
  • :async_upload - Upload asynchronously (default: false)

Usage

# On Fly.io - zero config needed
{:ok, session} = Conjure.Session.new_docker(skills,
  storage: Conjure.Storage.Tigris
)

# Local development with Tigris credentials
{:ok, session} = Conjure.Session.new_docker(skills,
  storage: {Conjure.Storage.Tigris,
    bucket: "dev-sessions",
    endpoint: "https://fly.storage.tigris.dev"
  }
)

Multi-Region Session Affinity

Tigris automatically serves data from the nearest region. For debugging or session routing, you can include region in the session prefix:

{:ok, session} = Conjure.Session.new_docker(skills,
  storage: {Conjure.Storage.Tigris,
    prefix: "sessions/#{System.get_env("FLY_REGION")}/"
  }
)

See Also

Summary

Types

t()

@type t() :: %Conjure.Storage.Tigris{s3_state: Conjure.Storage.S3.t()}