DigitalOcean Spaces offers a cost-effective, S3-compatible object storage solution that’s perfect for developers looking to store and serve files, media, and static assets. In this guide, we’ll explore how to get started with DigitalOcean Spaces and demonstrate its compatibility with existing S3 tools and libraries.
What is DigitalOcean Spaces?
DigitalOcean Spaces is an object storage service that provides:
- S3-compatible API
- Built-in CDN functionality
- Simple pricing model ($5/month for 250GB storage + 1TB bandwidth) here official pricing page
- Geographic distribution options
- Easy-to-use web interface
Getting Started
1. Creating Your First Space
- Log into your DigitalOcean account (if you dont have an account here our link just to start straight away with 200$)
- Navigate to “Spaces” in the left sidebar
- Click “Create Space”
- Choose a region close to your target audience
- Set a unique name for your Space
- Configure file access settings (public/private)
If you go to the created DO Bucket
2. Generating Access Keys
# You'll need these credentials for API access
Spaces Access Key: YOUR_ACCESS_KEY
Spaces Secret Key: YOUR_SECRET_KEY
Before using the API, generate access keys from the DigitalOcean control panel:
- Go to API > Spaces keys
- Generate New Key
- Save both the access key and secret key securely
Using the AWS SDK with Spaces
Since Spaces is S3-compatible, you can use the AWS SDK with minimal modifications. Here’s an example using Python:
import boto3
import os
do_bucketname = 'superbucketdo'
# Configure the client
session = boto3.session.Session()
client = session.client('s3',
region_name='fra1', # DigitalOcean region
endpoint_url='https://fra1.digitaloceanspaces.com', # Region endpoint
aws_access_key_id='DO00L3GQPYTXXXXXX',
aws_secret_access_key='cHUzVytBVeeIdDhEaacF1cl88LXXXXXXXXXXXXXXXXXXXXXXXX'
)
# Step 1: Generate a dummy file locally with some content
file_name = 'local_file.txt'
with open(file_name, 'w') as file:
file.write('I like DigitalOcean Spaces.')
# Step 2: # Upload a file
client.upload_file(
'local_file.txt',
do_bucketname,
'remote_file.txt',
ExtraArgs={'ACL': 'private'} # Make file private
)
# Step 3: List the files in the specified space
response = client.list_objects_v2(Bucket=do_bucketname)
if 'Contents' in response:
for obj in response['Contents']:
print(obj['Key'])
else:
print('No files found.')
Common Operations
Uploading Files
# Upload with metadata
client.put_object(
Bucket=do_bucketname,
Key='remote_file.txt',
Body='File contents',
Metadata={
'Content-Type': 'text/plain',
'x-amz-meta-custom': 'custom-value',
'access_type': 'private'
}
)
Here i have uploaded a file on the fly with the name called “remote_file.txt” and content “File contents” and made it private. also added a new key-value pair for metadata.
Downloading Files
# Download file
client.download_file(
'your-space-name',
'remote_file.txt',
'downloaded_file.txt'
)
Here i am downloading one file from DigitalOcean Spaces
Managing Access Control
Access control can be managed via DigitalOcean Spaces console or via code like below code, a file/object in DigitalOcean bucket either can be
- Public
- Private
# Make object public
client.put_object_acl(
Bucket='your-space-name',
Key='file.txt',
ACL='public-read'
)
# Make object private
client.put_object_acl(
Bucket='your-space-name',
Key='file.txt',
ACL='private'
)
Using the CDN
DigitalOcean Spaces includes a built-in CDN. To enable it:
- Navigate to your Space settings
- Enable CDN
- Use the CDN endpoint:
https://your-space-name.nyc3.cdn.digitaloceanspaces.com
Best Practices
- Region Selection: Choose a region closest to your users for optimal performance
- Security:
- Never commit access keys to version control
- Use environment variables for credentials
- Implement proper bucket policies
- Performance:
- Enable CDN for frequently accessed files
- Use appropriate file permissions
- Implement caching headers
- Cost Optimization:
- Monitor bandwidth usage
- Clean up unused files
- Use lifecycle policies for automatic cleanup
Comparison with AWS S3
Advantages of Spaces:
- Simpler pricing model
- Included CDN
- Easy-to-use interface
- Good integration with DigitalOcean services
Limitations:
- Fewer regions available
- Less advanced features compared to S3
- Limited analytics and monitoring
Conclusion
DigitalOcean Spaces provides a robust, cost-effective alternative to AWS S3 for many use cases. Its S3-compatible API makes migration straightforward, while its simple pricing and included CDN make it an attractive option for developers and small to medium-sized applications.
Remember to always follow security best practices and properly manage your access credentials when working with any cloud storage solution.