Learn
Volumes

Volumes

Volumes provide persistent disk storage for applications.

They also support remote access with any S3 compatible client.

⚠️

In the current initial implementation, volumes are restricted to a single Edge region.

Volumes also at the moment only provide read-write-many semantics. Due to the automatic auto-scaling for apps, this means that volumes are not currently well-suited for databases or other more complex use cases that require a single writer.

Keep in mind that volumes can be accessed concurrently, and even from different nodes.

These restrictions (including the single-region restriction) will be lifted in the future.

Create and Use Volumes

  • Every app may have multiple volumes.
  • Each volume has a name, which must be unique for the application.
  • Volumes can be mounted at a chosen path.
  • Each volume can be mounted multiple times.

Simply extend your app configuration with a volumes section:

app.yaml
# ...
 
volumes:
  # A name for your volume.
  # Must be unique for the given app.
  - name: data
    # Create a persistent volume named "data" in `/data`.
    mount: /data
 
  - name: more_data
    # Create a persistent volume named "more_data" in `/other_mntpoint`.
    mount: /other_mntpoint

This will create two new volumes: "data", which will be mounted at /data and "more_data" which will be mounted at /other_mntpoint.

Now just re-deploy your app with wasmer deploy, and the volume will be automatically created.

Your application can now use the mount path and treat it as persistent storage.

⚠️

The name of a volume acts as a unique identifier. If you change the name the old volume - including it's data - will be deleted!

Deleting Volumes

To delete a volume, simply remove it from your app configuration and re-deploy. The data will be purged, and your app will not have access to the volume anymore.

⚠️

If you rename or remove a volume from the app.yaml configuration, all data will be deleted when you deploy, and can not be recovered.

Make sure this is what you want before deploying!

Inspecting Volumes

You can inspect volumes in two ways:

  • in the web frontend on your app dashboard: Go to the "Storage" tab - you will see a list of volumes with their size.
  • using the CLI: Run wasmer app volumes list [app] to list all volumes and their sizes.

Remotely Accessing Volumes

Volumes are not only available to your apps, but can also be remotely accessed through the standard S3 API, or through a builtin web UI.

You can use the CLI to retrieve the credentials:

wasmer app volumes credentials --format=json

This will print the S3 API URL, access key and secret key in the JSON format.

You can visit the above URL in your browser to access a builtin web UI!

Configuring rclone

rclone (opens in a new tab) is a popular CLI client that allows full access to your volumes. It even allows mounting a volume to your local machine!

You can get an rclone configuration snippet through the CLI:

wasmer app volumes credentials --format=rclone

This will print out a configuration snippet that can be added to the rclone configuration file.

The config file is usually located at ~/.config/rclone/rclone.conf, but you can retrieve the active path with rclone config file.

Some examples of using rclone:

(Note: replace <target> with the name of the rclone target)

# List all volumes in this app:
rclone lsd <target>:
 
# List files in a given volume:
rclone lsd <target>:<volume-name>
 
# Copy a file to a volume:
rclone copy ./local-filename <target>:<volume-name>/remote-filename
 
# Mount a volume to a local directory
mkdir my-volume
rclone mount <target>:<volume-name> ./my-volume

Rotating credentials

In order to rotate (i.e. automatically assign a different value) the credentials tied to your volumes, you can simply run this command with the CLI:

wasmer app volumes rotate-secrets 

This command will rotate their values and show the new ones directly in the CLI.