Shuttle Architecture
Understand how Shuttle's infrastructure-from-code platform works under the hood
Overview
Shuttle is designed around a fundamental principle: Infrastructure from Code. Unlike traditional platforms where you configure infrastructure separately from your application code, Shuttle provisions and manages infrastructure directly from your Python code using type hints and decorators.
Core Architecture
The Shuttle Runtime
At the heart of Shuttle is how your application's entrypoint is handled, typically using shuttle_runtime.main(your_function)
or a decorated function like @shuttle_task.cron
. This approach:
Analyzes your code to understand what resources you need
Provisions infrastructure automatically based on your type hints and resource options
Handles deployment lifecycle including startup, shutdown, and health checks
Manages resource connections and provides them to your application
import shuttle_runtime
import shuttle_task
from shuttle_aws.s3 import Bucket, BucketOptions
from shuttle_aws.rds import RdsPostgres, RdsPostgresOptions
from typing import Annotated
@shuttle_task.cron(schedule="0 3 * * ? *")
async def run(
bucket: Bucket: Annotated[
Bucket, BucketOptions(bucket_name="my-bucket", policies=[])
],
db: Annotated[RdsPostgres, RdsPostgresOptions()],
):
# Your app code here - infrastructure is ready
pass
Resource Provisioning System
Shuttle's resource system works through a combination of:
Code Analysis: Shuttle scans your code for type hints and resource options
Infrastructure Planning: The platform determines what resources to provision
Automatic Provisioning: Resources are created and configured
Runtime Injection: Live connections are provided to your application
This approach eliminates the need for:
Manual infrastructure configuration
Environment-specific connection strings
Complex deployment scripts
Infrastructure-as-code templates
Deployment Pipeline
When you run shuttle deploy
, here's what happens:
Code Archive: Your project is bundled and uploaded
Build Phase: Dependencies are installed and code is prepared in a secure build environment
Resource Analysis: The runtime analyzes required resources
Infrastructure Provisioning: Resources are created or updated
Container Deployment: Your app is deployed to AWS ECS (Fargate)
Health Checks: The platform verifies deployment success
Isolation and Security
Each Shuttle project runs in its own:
ECS Service: Dedicated compute isolation
Resource Namespace: Logical separation of databases, secrets, etc.
Network Context: Isolated networking and security groups
Design Principles
Developer Experience First
Shuttle prioritizes developer productivity by:
Reducing boilerplate and configuration
Providing immediate feedback during development
Abstracting infrastructure complexity
Maintaining familiar Python development patterns
Infrastructure Transparency
While Shuttle abstracts infrastructure management, it maintains transparency by:
Providing clear resource information in the console
Offering detailed deployment logs
Supporting custom resource configurations when needed
Maintaining compatibility with standard Python libraries and frameworks
Scalability by Design
The architecture supports growth through:
Automatic resource scaling based on usage
Support for custom resource configurations
Integration with external services and databases
Multi-region deployment capabilities (Enterprise)
Comparison with Traditional Approaches
Traditional Deployment
Code → Docker Image → Kubernetes/Docker Compose → Infrastructure Config → Deploy
Shuttle Approach
Annotated Code → shuttle deploy → Running Application
This simplified flow reduces complexity while maintaining full control over your application logic.
Resource Lifecycle
Resources in Shuttle follow a managed lifecycle:
Declaration: Resources are declared via type hints and decorators in your code
Provisioning: First deployment creates the resource
Persistence: Resources persist across deployments
Management: Resources can be managed via CLI or console
Cleanup: Resources are cleaned up when projects are deleted
This lifecycle ensures that your data persists while your application code evolves.
Understanding the Platform Benefits
Shuttle's architecture provides several key advantages:
Faster Development: No infrastructure setup time
Reduced Complexity: Infrastructure and application code in one place
Better Reliability: Managed infrastructure with automatic scaling
Cost Efficiency: Pay only for what you use, automatic optimization
Security: Built-in best practices and managed updates
Understanding these architectural principles helps you make the most of Shuttle's capabilities and design applications that leverage the platform's strengths.
Last updated