Configuration¶
This guide covers all the configuration options available for S3 Asyncio Client.
Basic Configuration¶
Required Parameters¶
from s3_asyncio_client import S3Client
client = S3Client(
access_key="your-access-key", # AWS Access Key ID
secret_key="your-secret-key", # AWS Secret Access Key
region="us-east-1" # AWS Region
)
Optional Parameters¶
client = S3Client(
access_key="your-access-key",
secret_key="your-secret-key",
region="us-east-1",
endpoint_url="https://s3.amazonaws.com", # Custom S3 endpoint
session_token=None # AWS Session Token (for temporary credentials)
)
Environment Variables¶
You can also configure the client using environment variables:
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_DEFAULT_REGION="us-east-1"
export AWS_SESSION_TOKEN="your-session-token" # Optional
export S3_ENDPOINT_URL="https://s3.amazonaws.com" # Optional
import os
from s3_asyncio_client import S3Client
client = S3Client(
access_key=os.environ["AWS_ACCESS_KEY_ID"],
secret_key=os.environ["AWS_SECRET_ACCESS_KEY"],
region=os.environ["AWS_DEFAULT_REGION"],
endpoint_url=os.environ.get("S3_ENDPOINT_URL"),
session_token=os.environ.get("AWS_SESSION_TOKEN")
)
S3-Compatible Services¶
The client works with any S3-compatible service by setting a custom endpoint URL.
MinIO¶
client = S3Client(
access_key="minioadmin",
secret_key="minioadmin",
region="us-east-1", # MinIO requires a region, use any valid AWS region
endpoint_url="http://localhost:9000"
)
DigitalOcean Spaces¶
client = S3Client(
access_key="your-spaces-key",
secret_key="your-spaces-secret",
region="nyc3",
endpoint_url="https://nyc3.digitaloceanspaces.com"
)
Wasabi¶
client = S3Client(
access_key="your-wasabi-key",
secret_key="your-wasabi-secret",
region="us-east-1",
endpoint_url="https://s3.wasabisys.com"
)
Cloudflare R2¶
client = S3Client(
access_key="your-r2-key",
secret_key="your-r2-secret",
region="auto", # R2 uses "auto" as the region
endpoint_url="https://your-account-id.r2.cloudflarestorage.com"
)
Authentication Methods¶
IAM User Credentials¶
Standard AWS IAM user credentials:
client = S3Client(
access_key="AKIAIOSFODNN7EXAMPLE",
secret_key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
region="us-east-1"
)
Temporary Credentials (STS)¶
For temporary credentials from AWS STS:
client = S3Client(
access_key="ASIAIOSFODNN7EXAMPLE",
secret_key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
session_token="AQoDYXdzEJr...<remainder of security token>",
region="us-east-1"
)
IAM Roles (EC2/Lambda)¶
When running on EC2 instances or Lambda functions with IAM roles, you can retrieve credentials from the instance metadata service or environment:
import boto3
# Get credentials from boto3 (which handles IAM roles automatically)
session = boto3.Session()
credentials = session.get_credentials()
client = S3Client(
access_key=credentials.access_key,
secret_key=credentials.secret_key,
session_token=credentials.token,
region=session.region_name or "us-east-1"
)
Advanced Configuration¶
Custom Session Configuration¶
The client uses aiohttp internally. You can customize the underlying HTTP session by subclassing the client:
import aiohttp
from s3_asyncio_client import S3Client
class CustomS3Client(S3Client):
async def _ensure_session(self):
if self._session is None:
timeout = aiohttp.ClientTimeout(total=30, connect=10)
connector = aiohttp.TCPConnector(limit=100, limit_per_host=10)
self._session = aiohttp.ClientSession(
timeout=timeout,
connector=connector
)
client = CustomS3Client(access_key, secret_key, region)
Logging Configuration¶
Enable debug logging to troubleshoot issues:
import logging
# Enable debug logging for the client
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("s3_asyncio_client")
logger.setLevel(logging.DEBUG)
# Now all HTTP requests and responses will be logged
Configuration Best Practices¶
1. Use Environment Variables¶
Store sensitive credentials in environment variables rather than hardcoding them:
import os
from s3_asyncio_client import S3Client
client = S3Client(
access_key=os.environ["AWS_ACCESS_KEY_ID"],
secret_key=os.environ["AWS_SECRET_ACCESS_KEY"],
region=os.environ.get("AWS_DEFAULT_REGION", "us-east-1")
)
2. Use Context Managers¶
Always use async context managers to ensure proper cleanup:
async with S3Client(access_key, secret_key, region) as client:
# Your code here
pass
# Client is automatically closed
3. Handle Different Environments¶
Create a configuration function that handles different environments:
import os
from s3_asyncio_client import S3Client
def create_s3_client():
if os.environ.get("ENVIRONMENT") == "development":
# Use MinIO for local development
return S3Client(
access_key="minioadmin",
secret_key="minioadmin",
region="us-east-1",
endpoint_url="http://localhost:9000"
)
else:
# Use AWS S3 for production
return S3Client(
access_key=os.environ["AWS_ACCESS_KEY_ID"],
secret_key=os.environ["AWS_SECRET_ACCESS_KEY"],
region=os.environ["AWS_DEFAULT_REGION"]
)
async def main():
async with create_s3_client() as client:
# Your application code
pass
4. Validate Configuration¶
Add validation to catch configuration errors early:
import os
from s3_asyncio_client import S3Client
def validate_config():
required_vars = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"]
missing = [var for var in required_vars if not os.environ.get(var)]
if missing:
raise ValueError(f"Missing required environment variables: {missing}")
def create_s3_client():
validate_config()
return S3Client(
access_key=os.environ["AWS_ACCESS_KEY_ID"],
secret_key=os.environ["AWS_SECRET_ACCESS_KEY"],
region=os.environ.get("AWS_DEFAULT_REGION", "us-east-1")
)
Next Steps¶
Now that you have your client configured, learn about:
- Basic Operations - Core S3 operations
- Error Handling - Handling different types of errors
- Examples - Practical usage examples