Documentation
Object storage

Object Storage

Store files, uploads, backups, and other objects in S3-compatible buckets managed through Sliplane.

Sliplane Object Storage gives your team S3-compatible buckets for files, uploads, backups, generated assets, and other data that does not belong on a server volume.

How it works

Object Storage is managed at the team level. Buckets are not tied to a specific project, server, or service.

Open Object Storage in the dashboard to manage buckets and their access keys.

Regions

Object Storage is currently available in these regions:

Region IDRegionCity
gerGermanyFrankfurt
us-eastUS EastNew York

Choose the region closest to your application or users.

Create a bucket

In the dashboard, go to Object Storage and click Create Bucket.

Choose a bucket name, region, and whether you want to enable versioning or object locking.

Bucket names must follow S3 naming rules:

  • 3 to 63 characters
  • lowercase letters, numbers, dots, and hyphens
  • must start and end with a letter or number
  • must be globally unique

Create an access key

Open a bucket and create an access key for it.

Access keys are scoped to exactly one bucket and have full read/write access to that bucket. They can list buckets and see whether other buckets exist in the same team, but they cannot access objects in other buckets.

The secret access key is shown only once when the key is created. Store it securely before closing the dialog.

Use the bucket

Use the bucket endpoint, bucket name, access key ID, and secret access key with any S3-compatible client.

Configure your environment

Use AWS CLI v2 or a current AWS SDK. Configure the connection with environment variables or a named profile.

The examples set both region variables for compatibility with Boto3 and the other clients.

Copy the endpoint URL from your bucket in Sliplane.

Option 1: Environment variables

export AWS_ACCESS_KEY_ID="your_access_key_id"
export AWS_SECRET_ACCESS_KEY="your_secret_access_key"
export AWS_ENDPOINT_URL="https://your_bucket_endpoint"
export AWS_REGION="auto"
export AWS_DEFAULT_REGION="auto"
set "AWS_ACCESS_KEY_ID=your_access_key_id"
set "AWS_SECRET_ACCESS_KEY=your_secret_access_key"
set "AWS_ENDPOINT_URL=https://your_bucket_endpoint"
set "AWS_REGION=auto"
set "AWS_DEFAULT_REGION=auto"
$Env:AWS_ACCESS_KEY_ID="your_access_key_id"
$Env:AWS_SECRET_ACCESS_KEY="your_secret_access_key"
$Env:AWS_ENDPOINT_URL="https://your_bucket_endpoint"
$Env:AWS_REGION="auto"
$Env:AWS_DEFAULT_REGION="auto"

Option 2: AWS profile

Add a named profile to your AWS configuration files. On Linux and macOS these live in ~/.aws/; on Windows they live in %USERPROFILE%\.aws\.

~/.aws/credentials:

~/.aws/credentials
[sliplane]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

~/.aws/config:

~/.aws/config
[profile sliplane]
endpoint_url = https://your_bucket_endpoint
region = auto

Then export the profile to your environment:

export AWS_PROFILE=sliplane
set "AWS_PROFILE=sliplane"
$Env:AWS_PROFILE="sliplane"

If another AWS endpoint setting overrides your bucket URL, check configuration precedence.

Quick starts

Choose a client below:

# List buckets
aws s3 ls

# Upload a file
aws s3 cp ./hello.txt s3://my-bucket/

# Download a file
aws s3 cp s3://my-bucket/hello.txt ./hello.txt
import {
  S3Client,
  ListBucketsCommand,
  PutObjectCommand,
  ListObjectsV2Command,
  GetObjectCommand,
} from "@aws-sdk/client-s3"
import { getSignedUrl } from "@aws-sdk/s3-request-presigner"

const s3 = new S3Client({})
const BUCKET_NAME = "my-bucket"

// List buckets
const { Buckets } = await s3.send(new ListBucketsCommand({}))
console.log(Buckets)

// Upload a file
await s3.send(
  new PutObjectCommand({
    Bucket: BUCKET_NAME,
    Key: "hello.txt",
    Body: "Hello, Sliplane!",
  }),
)

// List objects in the bucket
const list = await s3.send(
  new ListObjectsV2Command({ Bucket: BUCKET_NAME }),
)
console.log(list.Contents)

// Get a presigned URL for the object
const url = await getSignedUrl(
  s3,
  new GetObjectCommand({
    Bucket: BUCKET_NAME,
    Key: "hello.txt",
  }),
  { expiresIn: 120 },
)
console.log(url)
import boto3

s3 = boto3.client("s3")

# List buckets
for bucket in s3.list_buckets()["Buckets"]:
    print(bucket["Name"])

# Upload a file
s3.upload_file("./hello.txt", "my-bucket", "hello.txt")
package main

import (
    "context"
    "fmt"
    "log"

    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
    ctx := context.Background()

    sdkConfig, err := config.LoadDefaultConfig(ctx)
    if err != nil {
        log.Fatalf("Load S3 configuration: %v", err)
    }

    s3Client := s3.NewFromConfig(sdkConfig)

    result, err := s3Client.ListBuckets(ctx, &s3.ListBucketsInput{})
    if err != nil {
        log.Fatalf("List Sliplane buckets: %v", err)
    }
    for _, b := range result.Buckets {
        fmt.Println(*b.Name)
    }
}
import software.amazon.awssdk.services.s3.S3Client;

public class HelloS3 {
    public static void main(String[] args) {
        S3Client s3 = S3Client.builder().build();

        s3.listBuckets().buckets().forEach(b -> System.out.println(b.name()));
    }
}

AWS CLI and SDK guides

Language or frameworkLibraryDocumentation
CLIAWS CLICustom endpoints in the AWS CLI
JavaScript / TypeScriptAWS SDK for JavaScript v3, @aws-sdk/client-s3Amazon S3 examples using SDK for JavaScript v3
Pythonboto3boto3 S3 reference
GoAWS SDK for Go v2, service/s3Amazon S3 examples using SDK for Go v2
JavaAWS SDK for Java 2.xWork with Amazon S3
.NETAWS SDK for .NET, AWSSDK.S3Using Amazon S3 with the AWS SDK for .NET
PHPAWS SDK for PHPAWS SDK for PHP S3Client
RubyAWS SDK for Ruby, aws-sdk-s3AWS SDK for Ruby S3 client
RustAWS SDK for Rust, aws-sdk-s3Amazon S3 examples using SDK for Rust
KotlinAWS SDK for KotlinWork with Amazon S3 using the AWS SDK for Kotlin
LaravelLaravel filesystem S3 driverLaravel S3 driver configuration
RailsActive Storage S3 serviceRails Active Storage S3 service
Djangodjango-storages S3 backenddjango-storages Amazon S3 backend

API

You can also manage buckets and access keys through the Sliplane API.

Infrastructure provider

Object Storage is provided in partnership with ImpossibleCloud GmbH.

How is this guide?

On this page