What to Back Up
Aurora’s data is distributed across:- PostgreSQL - Incidents, alerts, suggestions, thoughts, users, credentials
- Weaviate - Semantic search vectors, knowledge base embeddings
- Vault - User credentials, API tokens, secrets
- Object Storage (SeaweedFS/S3) - File uploads, Terraform state, exported data
- Redis - Celery tasks, cache (ephemeral - can be rebuilt)
Backup Strategy
Backup Schedule
- PostgreSQL: Daily full backup + continuous WAL archiving
- Weaviate: Weekly snapshot
- Vault: Daily backup
- Object Storage: Continuous replication to secondary region
- Redis: No backup needed (cache only)
Backing Up PostgreSQL
Manual Backup
1
Create a backup directory
2
Run pg_dump
--format=custom option enables parallel restore and selective table restore.3
Verify the backup
Automated Backup Script
Createscripts/backup-postgres.sh:
Continuous WAL Archiving
For point-in-time recovery, enable WAL archiving in PostgreSQL. Add toconfig/postgres/postgresql.conf:
docker-compose.yaml to mount the config:
Backing Up Weaviate
1
Create a Weaviate backup
Weaviate supports backups via API:
2
Check backup status
3
Export backup files
Weaviate stores backups in
/var/lib/weaviate/backups inside the container:Automated Weaviate Backup
Backing Up Vault
1
Take a Vault snapshot
2
Encrypt the snapshot
3
Upload to secure storage
Vault Backup Script
Backing Up Object Storage (SeaweedFS)
SeaweedFS backups depend on your deployment:Option 1: S3 Sync
Sync to another S3-compatible service:Option 2: Volume Backup
Back up Docker volumes:Option 3: SeaweedFS Replication
Configure cross-datacenter replication indocker-compose.yaml:
Restoring from Backup
Restore PostgreSQL
1
Stop Aurora services
2
Drop and recreate database
3
Restore from dump
4
Restart Aurora
Restore Weaviate
1
Stop Weaviate
2
Copy backup into container
3
Restore via API
4
Verify restore
Restore Vault
1
Stop Vault
2
Decrypt backup
3
Restore snapshot
4
Unseal Vault
Restore Object Storage
Restore SeaweedFS volumes:Disaster Recovery Testing
DR Test Checklist
-
Create a test environment
- Restore all components (PostgreSQL, Weaviate, Vault, object storage)
-
Verify data integrity
- Check incident count:
SELECT COUNT(*) FROM incidents; - Test authentication
- Verify file uploads work
- Check incident count:
- Run a test investigation to ensure all systems function
- Document any issues and update procedures
Backup Monitoring
Monitor backup health:Backup Retention Policy
- Development
- Production
- Daily backups: 7 days retention
- Weekly backups: 4 weeks retention
- No long-term archival
Security Considerations
- Encrypt backups at rest - Use GPG, age, or S3 SSE
- Encrypt backups in transit - Use HTTPS/TLS for uploads
- Restrict access - Use IAM policies, bucket policies, and MFA
- Audit access logs - Enable CloudTrail or equivalent
- Test encryption - Verify you can decrypt backups
- Rotate encryption keys - Update keys annually
- Separate backup credentials - Use dedicated service accounts
Troubleshooting
Backup script fails with permission denied
Backup script fails with permission denied
Ensure the script can access Docker:
Restore fails with constraint violations
Restore fails with constraint violations
Restore with
--no-owner --no-privileges:Weaviate backup times out
Weaviate backup times out
Increase timeout for large datasets:
Vault unseal keys lost
Vault unseal keys lost
If you lose unseal keys, you cannot recover Vault data. This is by design.Always store unseal keys in multiple secure locations:
- Encrypted USB drives
- Hardware security modules (HSMs)
- Split across key personnel (Shamir’s Secret Sharing)
Next Steps
First Investigation
Run your first incident investigation
Custom Connectors
Build integrations for proprietary systems