Skip to main content

Overview

S2 Lite uses object storage as its primary durability layer through SlateDB. This guide covers setup for popular S3-compatible storage providers.

AWS S3

Prerequisites

  • AWS account with S3 access
  • IAM credentials or EC2 instance profile
  • S3 bucket created in your desired region

IAM Permissions

Create an IAM policy with the following permissions:

Local Development with AWS Profile

1

Configure AWS credentials

Ensure your AWS credentials are configured:
2

Create an S3 bucket

3

Run S2 Lite with Docker

Production with IAM Roles

EC2 Instance Profile

1

Create IAM role

Create an IAM role with the S2 Lite policy and attach it to your EC2 instance.
2

Launch S2 Lite

S2 Lite automatically discovers and uses the instance profile credentials.

Kubernetes with IRSA (EKS)

1

Create IAM role for service account

2

Install Helm chart with IRSA

Avoid using static credentials in production. Use IAM roles or instance profiles instead.

Tigris

Tigris provides globally distributed S3-compatible object storage with low latency.

Setup

1

Create Tigris bucket

Sign up at tigrisdata.com and create a bucket.
2

Get credentials

Generate access credentials from the Tigris console:
  • AWS Access Key ID
  • AWS Secret Access Key
3

Run S2 Lite

Kubernetes Deployment

1

Create secret for credentials

2

Deploy with Helm

Cloudflare R2

Cloudflare R2 provides S3-compatible storage with zero egress fees.

Setup

1

Create R2 bucket

Create a bucket in the Cloudflare dashboard under R2.
2

Generate API token

Create an R2 API token with read and write permissions:
  • Access Key ID
  • Secret Access Key
  • Account ID (for endpoint)
3

Run S2 Lite

Public Endpoint (Optional)

Cloudflare R2 supports custom domains for public bucket access:

MinIO (Self-Hosted)

MinIO is a high-performance, self-hosted S3-compatible object store.

Local Development

1

Start MinIO server

2

Create bucket

Access MinIO console at http://localhost:9001 and create a bucket named s2lite.
3

Run S2 Lite

Production Deployment

For production MinIO deployments:

Advanced Configuration

SlateDB Settings

Customize SlateDB behavior using SL8_ prefixed environment variables:
See SlateDB Settings Reference for all options.

Enable Pipelining (Experimental)

Enable append pipelining for improved performance:
Pipelining is currently experimental and disabled by default. See issue #48 for status.

Path Organization

Use the --path flag to organize multiple S2 Lite instances in the same bucket:

Testing Your Setup

1

Check server health

Should return 200 OK.
2

Configure S2 CLI

3

Create a basin

4

Test write and read

Troubleshooting

Connection Issues

  • Verify bucket name is correct
  • Check endpoint URL format (must include https:// or http://)
  • Ensure credentials have proper permissions
  • Test connectivity: aws s3 ls s3://your-bucket --endpoint-url $AWS_ENDPOINT_URL_S3
  • Review IAM policy permissions
  • Verify bucket exists in the specified region
  • Check that credentials are not expired
  • For IRSA, ensure service account annotations are correct
S2 Lite auto-detects region from AWS config. Set explicitly if needed:

Performance Issues

  • Reduce SL8_FLUSH_INTERVAL for faster acknowledgment (at cost of more object store writes)
  • Enable pipelining with S2LITE_PIPELINE=true (experimental)
  • Ensure S2 Lite is deployed in the same region as your object storage
S2 Lite sleeps for one manifest_poll_interval on startup to ensure proper fencing. This is expected behavior. Reduce interval if needed:

Next Steps

Production Deployment

Deploy S2 Lite on Kubernetes with Helm

Backup & Restore

Configure backup strategies for your data