Swift/RGW S3 API

Create object storage buckets/containers using Swift/Ceph-RGW S3 API


This guide details how to use Ceph Object Gateway S3 API for managing object storage on Wavestack.

Specifically, you will learn how to:

  • Create a credential for authentication with the Object Gateway S3 API
  • Create a bucket/container
  • Upload data to the bucket/container
  • Access data in the bucket/container
  • Manage data in the bucket/container
  • Delete a bucket/container


In order to follow this guide, the following tools have to be installed:


The steps in this guide have been tested with the following versions:


Access the Wavestack dashboard

You will probably spend most of your time on the command line, but you can also log into the Wavestack dashboard with your Wavestack account if you want to get an overview of the provisioned resources.

About the Wavestack object storage

The Wavestack object store is built using Ceph and distributed across three availability zones, namely muc5-a, muc5-b and muc5-d. Object data is thus redundantly replicated across all 3 AZs. The endpoint for the MUC5 RGW is rgw.muc5.wavestack.de.

Your buckets (or containers) are bound to your OpenStack project via Keystone RGW Tenants.

You can access the Wavestack object store with either the openstackclient, or an S3 API-compatible tool.

For more detailed information on the features of the S3-API, please refer to Ceph S3 Documentation. This includes instructions on how to use advanced features such as object lock/immutability/worm, which can be crucial for implementing compliance and data retention policies.

EC2 Credentials

To access the S3 API with any other client than the Openstackclient like AWS CLI it is necessary to generate an EC2 credential as described here.

For this we utilise the openstackclient:

❯  openstack ec2 credentials create

Creation of Buckets/Containers

To create a bucket/container you run:

❯ openstack container create <containername>

Handling Data in Buckets/Containers

You can handle objects in your containers by utilising the openstackclient. For example you can upload one or many objects with the following command:

❯ openstack object create <container> <file> [<file2> <file3>  ...]

In a similar vein you can list data in your container by running the following command:

❯ openstack object list <container>

Download objects to your local machine like so:

❯ openstack object save <container> <object>

If you wish to delete one or multiple object from your container you can delete objects with the following command:

❯ openstack object delete <container> <object> [<object> ...]

Deletion of Buckets/Containers

Should you want to delete one or multiple containers you can utilise the openstackclient for that task as well.

It should be noted that a container is required to be empty before it can be deleted. Alternatively you can delete the container and content at the same time by passing the --recursive flag.

❯ openstack container delete [--recursive] <container> [<container> ...]