Files
soleprint/station/tools/infra/README.md
2025-12-24 05:38:37 -03:00

164 lines
4.0 KiB
Markdown

# Amar Mascotas Infrastructure as Code
Pulumi configurations for deploying the Amar Mascotas backend to different cloud providers.
## Structure
```
infra/
├── digitalocean/ # DigitalOcean configuration
├── aws/ # AWS configuration
├── gcp/ # Google Cloud configuration
└── shared/ # Shared Python utilities
```
## Prerequisites
```bash
# Install Pulumi
curl -fsSL https://get.pulumi.com | sh
# Install Python dependencies
pip install pulumi pulumi-digitalocean pulumi-aws pulumi-gcp
# Login to Pulumi (free tier, or use local state)
pulumi login --local # Local state (no account needed)
# OR
pulumi login # Pulumi Cloud (free tier available)
```
## Cloud Provider Setup
### DigitalOcean
```bash
export DIGITALOCEAN_TOKEN="your-api-token"
```
### AWS
```bash
aws configure
# Or set environment variables:
export AWS_ACCESS_KEY_ID="xxx"
export AWS_SECRET_ACCESS_KEY="xxx"
export AWS_REGION="us-east-1"
```
### GCP
```bash
gcloud auth application-default login
export GOOGLE_PROJECT="your-project-id"
```
## Usage
```bash
cd infra/digitalocean # or aws, gcp
# Preview changes
pulumi preview
# Deploy
pulumi up
# Destroy
pulumi destroy
```
## Cost Comparison (Estimated Monthly)
| Resource | DigitalOcean | AWS | GCP |
|----------|--------------|-----|-----|
| Compute (4GB RAM) | $24 | $35 | $30 |
| Managed Postgres | $15 | $25 | $25 |
| Managed Redis | $15 | $15 | $20 |
| Load Balancer | $12 | $18 | $18 |
| **Total** | **~$66** | **~$93** | **~$93** |
## Architecture
All configurations deploy:
- 1x App server (Django + Gunicorn + Celery)
- 1x Managed PostgreSQL with PostGIS
- 1x Managed Redis
- VPC/Network isolation
- Firewall rules (SSH, HTTP, HTTPS)
## Provider Comparison
### Code Complexity
| Aspect | DigitalOcean | AWS | GCP |
|--------|--------------|-----|-----|
| Lines of code | ~180 | ~280 | ~260 |
| Resources created | 8 | 15 | 14 |
| Networking setup | Simple (VPC only) | Complex (VPC + subnets + IGW + routes) | Medium (VPC + subnet + peering) |
| Learning curve | Low | High | Medium |
### Feature Comparison
| Feature | DigitalOcean | AWS | GCP |
|---------|--------------|-----|-----|
| **Managed Postgres** | Yes (DO Database) | Yes (RDS) | Yes (Cloud SQL) |
| **PostGIS** | Via extension | Via extension | Via flags |
| **Managed Redis** | Yes (DO Database) | Yes (ElastiCache) | Yes (Memorystore) |
| **Private networking** | VPC | VPC + subnets | VPC + peering |
| **Load balancer** | $12/mo | $18/mo | $18/mo |
| **Auto-scaling** | Limited | Full (ASG) | Full (MIG) |
| **Regions** | 15 | 30+ | 35+ |
| **Free tier** | None | 12 months | $300 credit |
### When to Choose Each
**DigitalOcean:**
- Simple deployments
- Cost-sensitive
- Small teams
- Latin America (São Paulo region)
**AWS:**
- Enterprise requirements
- Need advanced services (Lambda, SQS, etc.)
- Complex networking needs
- Compliance requirements (HIPAA, PCI)
**GCP:**
- Machine learning integration
- Kubernetes-first approach
- Good free credits to start
- BigQuery/analytics needs
### Real Cost Breakdown (Your App)
```
DigitalOcean (~$66/mo):
├── Droplet 4GB $24
├── Managed Postgres $15
├── Managed Redis $15
└── Load Balancer $12 (optional)
AWS (~$93/mo):
├── EC2 t3.medium $35
├── RDS db.t3.micro $25
├── ElastiCache $15
└── ALB $18 (optional)
GCP (~$93/mo):
├── e2-medium $30
├── Cloud SQL $25
├── Memorystore $20
└── Load Balancer $18 (optional)
```
### Migration Effort
If you ever need to switch providers:
| From → To | Effort | Notes |
|-----------|--------|-------|
| DO → AWS | Medium | Postgres dump/restore, reconfigure Redis |
| DO → GCP | Medium | Same as above |
| AWS → GCP | Medium | Similar services, different APIs |
| Any → Kubernetes | High | Need to containerize everything |
The Pulumi code is portable - only the provider-specific resources change.