External volumes are in beta and available to enterprise accounts only. Features and behavior may change before general availability.
- Your datasets or model weights already live in a bucket and you don’t want to migrate them.
- Your data must stay with a specific provider or in a specific region.
- You want Pods in any data center to read the same data, without duplicating volumes.
Requirements
- An organization account with the external volumes entitlement. Contact Runpod sales to enable it.
- An S3-compatible bucket.
- An access key for the bucket that can read and list objects under the path you want to mount. Add write access if your Pods will write to the bucket.
- To use the REST API, a Runpod API key with the scopes listed in Manage external volumes with the REST API.
Supported providers
External volumes support any storage that exposes an S3-compatible API with access key authentication, including:
Azure Blob Storage and native Google Cloud Storage authentication (service account JSON) aren’t supported.
Create a credential for your bucket
Runpod needs a long-lived access key pair. Temporary credentials, such as AWS STS session tokens or assumed roles, aren’t supported. Scope the key to the smallest set of permissions your workload needs. At minimum, the key must be able to:- List objects under the prefix you mount.
- Read objects under that prefix.
Amazon S3
Create an IAM user with a policy scoped to your bucket, then create an access key for that user. The following example grants read, write, and list access to thedatasets/ prefix of BUCKET_NAME:
s3:PutObject and s3:DeleteObject. To mount the whole bucket, remove the Condition block and change the object resource to arn:aws:s3:::BUCKET_NAME/*.
A key scoped to a prefix can only mount that prefix. Registering the same key at the bucket root fails the credential check.
Google Cloud Storage
Google Cloud Storage connects through its S3-compatible API, which uses HMAC keys:- In the Google Cloud console, go to Cloud Storage > Settings > Interoperability.
- Create an HMAC key for a service account that has access to your bucket.
- Copy the Access ID and Secret. Use them as the access key ID and secret access key when you create the external volume.
- Set the endpoint URL to
https://storage.googleapis.com.
Other providers
Create an access key in your provider’s console, and copy the provider’s S3-compatible endpoint URL. For Oracle Cloud, set Region to your OCI region identifier, such asus-ashburn-1. Region auto-detection doesn’t work with Oracle Cloud.
Create an external volume
When you create an external volume, Runpod checks the credential against your bucket before saving it. If the key can’t reach, read, or list the location you entered, creation fails with a message describing what to fix.1
Open the storage type selector
In the left nav, go to Storage and click + New volume. Under Storage type, select External volume.
2
Name the volume
Enter a Name to identify the volume in the console.
3
Enter the storage location
- Endpoint URL (optional): leave blank for Amazon S3. For other providers, enter their S3-compatible endpoint.
- Bucket: the exact bucket name, not a URL or path.
- Prefix (optional): mount one folder instead of the whole bucket, for example
datasets/production. - Region (optional): leave blank to detect it automatically.
4
Enter the credentials
Enter the Access key ID and Secret access key. You can’t view the secret again after saving.
5
Connect the bucket
Optionally add tags, then click Connect bucket.
Attach an external volume
Pods
Attach an external volume when you deploy a Pod, from the Storage section of the deploy page. On Pods:- The volume mounts at
/workspace-globalby default. You can choose a different mount path. - External volumes work on GPU and CPU Pods, in any data center.
- A Pod can attach one external volume and one network volume.
- A Pod can’t attach a global volume and an external volume at the same time.
- You can’t add or remove an external volume after the Pod is created. You can change its mount path.
Serverless
On Serverless endpoints:- External volumes work with GPU endpoints only.
- The volume always mounts at
/runpod-volume. - An endpoint can attach one external volume, and can’t use it together with a network volume or a global volume.
- You can attach, replace, or detach the volume on an existing endpoint. Workers redeploy to pick up the change.
Update credentials
You can replace the access key for an external volume without recreating it or redeploying endpoints. Runpod checks the new key against your bucket first. If the check fails, the existing key stays in place. Pods and Serverless workers that start after the update use the new key. Running Pods and workers keep using the old key until they restart, so keep the old key active until they do.Delete an external volume
Deleting an external volume removes its registration from Runpod. It never touches your bucket or its data. You can’t delete an external volume while it’s in use. First:- Terminate every Pod that mounts it. Stopped Pods count as using the volume.
- Detach it from every Serverless endpoint.
Manage external volumes with the REST API
The REST API supports the full lifecycle of an external volume. Use it to automate registration and key rotation.
Attaching a volume uses
pods:write or serverless:write, the same as network and global volumes.
Create an external volume
The following request registers thedatasets prefix of an Amazon S3 bucket:
endpointUrl, and add region when your provider requires it. Omit prefix to mount the whole bucket.
A successful request returns 201 with the new volume. The response never includes the secret access key:
region of null means the region is detected when the volume mounts.
Attach to a Pod
Pass the volume ID undermounts.external when you create the Pod. The following example also attaches a network volume:
mounts.external accepts one volume. Omit path to mount at /workspace-global.
Attach to a Serverless endpoint
Pass the volume ID undermounts.external when you create or update a GPU endpoint:
external field works as follows:
- Omit it to leave the current volume attached.
- Set it to a volume to attach or replace the volume.
- Set it to
[]to detach the volume.
Replace the credential
Limitations
- S3-compatible storage only: Azure Blob Storage and native Google Cloud Storage authentication aren’t supported.
- Access keys only: Temporary credentials and role assumption aren’t supported.
- Location is fixed: You can’t change the endpoint, bucket, prefix, or region after creation. To change them, delete the volume and create a new one.
- No usage reporting: Runpod doesn’t show size, object count, or cost for external volumes.
- One object-storage volume per Pod: A Pod can attach a global volume or an external volume, not both.
- GPU endpoints only: Serverless endpoints on CPU can’t attach external volumes.
- Revoked keys aren’t detected on running Pods: If you revoke a key or narrow its permissions while a Pod is running, reads and writes fail with I/O errors, but the mount still appears healthy.
Troubleshooting
Creating the volume fails
Runpod checks the bucket before saving, and the error message names the problem. Common causes:- The bucket doesn’t exist: check the bucket name for typos. Enter the name only, not a URL or path.
- Wrong region: clear the Region field to detect it automatically. For Oracle Cloud, set your OCI region identifier.
- The key can’t read or list the prefix: update the key’s permissions, or check that the prefix matches the one the key is scoped to.
- Couldn’t reach the bucket: check the endpoint URL and try again. The endpoint must be a public address.