Storage types
Skyvern supports three storage backends:Local storage (default)
By default, Skyvern stores all artifacts in a local directory..env
Docker volume mounts
When using Docker Compose, these paths are mounted from your host:docker-compose.yml
Limitations
Local storage works well for single-server deployments but has limitations:- Not accessible across multiple servers
- No automatic backup or redundancy
- Requires manual cleanup to manage disk space
AWS S3
Store artifacts in S3 for durability, scalability, and access from multiple servers.Configuration
.env
Authentication
Skyvern uses the standard AWS credential chain. Configure credentials using one of these methods: Environment variables:.env
.env
Required IAM permissions
Create an IAM policy with these permissions:Creating the buckets
Create the S3 buckets in your AWS account:Bucket names must be globally unique across all AWS accounts. Add a unique prefix or suffix (e.g., your company name or a random string).
Bucket configuration recommendations
Lifecycle rules: Configure automatic deletion of old artifacts to control costs.Azure Blob Storage
Store artifacts in Azure Blob Storage for Azure-based deployments.Configuration
.env
Creating the storage account and containers
Using Azure CLI:Using Managed Identity (recommended)
For Azure VMs or AKS, use Managed Identity instead of storage account keys:- Enable Managed Identity on your VM or AKS cluster
- Grant the identity “Storage Blob Data Contributor” role on the storage account
- Omit
AZURE_STORAGE_ACCOUNT_KEYfrom your configuration
What gets stored where
Videos (recordings) are currently always stored locally in
VIDEO_PATH regardless of storage type.
Pre-signed URLs
When artifacts are stored in S3 or Azure Blob, Skyvern generates pre-signed URLs for access. These URLs:- Expire after
PRESIGNED_URL_EXPIRATIONseconds (default: 24 hours) - Allow direct download without additional authentication
- Are included in task responses (
recording_url,screenshot_urls)
.env
Migrating from local to cloud storage
To migrate existing artifacts from local storage to S3 or Azure:S3
Azure
Disk space management
Local storage
Monitor disk usage and clean up old artifacts periodically:Cloud storage
Use lifecycle policies to automatically delete old objects: S3: Configure lifecycle rules to expire objects after N days. Azure: Configure lifecycle management policies in the Azure portal or via CLI.Troubleshooting
”Access Denied” errors
- Verify your credentials are correct
- Check IAM permissions include all required actions
- Ensure the buckets/containers exist
- For S3, verify the AWS region matches your bucket location
Pre-signed URLs not working
- Check that
PRESIGNED_URL_EXPIRATIONhasn’t elapsed - Verify bucket policy allows public access to pre-signed URLs
- For S3, ensure the bucket isn’t blocking public access if needed
Artifacts not appearing
- Check Skyvern logs for storage errors:
docker compose logs skyvern | grep -i storage - Verify the storage type is correctly set:
SKYVERN_STORAGE_TYPE - Ensure network connectivity to the storage endpoint
Next steps
Docker Setup
Return to the Docker setup guide
Kubernetes Deployment
Deploy Skyvern at scale

