provisioning/docs/src/infrastructure/batch-workflow-multi-provider.md

1 line
24 KiB
Markdown
Raw Normal View History

# Multi-Provider Batch Workflow Examples\n\nThis document provides practical examples of orchestrating complex deployments and operations across multiple cloud providers using the batch workflow\nsystem.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Workflow 1: Coordinated Multi-Provider Deployment](#workflow-1-coordinated-multi-provider-deployment)\n- [Workflow 2: Multi-Provider Disaster Recovery Failover](#workflow-2-multi-provider-disaster-recovery-failover)\n- [Workflow 3: Cost Optimization Workload Migration](#workflow-3-cost-optimization-workload-migration)\n- [Workflow 4: Multi-Region Database Replication](#workflow-4-multi-region-database-replication)\n- [Best Practices](#best-practices)\n- [Troubleshooting](#troubleshooting)\n\n## Overview\n\nThe batch workflow system enables declarative orchestration of operations across multiple providers with:\n\n- **Dependency Tracking**: Define what must complete before what\n- **Error Handling**: Automatic rollback on failure\n- **Idempotency**: Safe to re-run workflows\n- **Status Tracking**: Real-time progress monitoring\n- **Recovery Checkpoints**: Resume from failure points\n\n## Workflow 1: Coordinated Multi-Provider Deployment\n\n**Use Case**: Deploy web application across DigitalOcean, AWS, and Hetzner with proper sequencing and dependencies.\n\n**Workflow Characteristics**:\n- Database created first (dependencies)\n- Backup storage ready before compute\n- Web servers scale once database ready\n- Health checks before considering complete\n\n### Workflow Definition\n\n```\n# file: workflows/multi-provider-deployment.yml\n\nname: multi-provider-app-deployment\nversion: "1.0"\ndescription: "Deploy web app across three cloud providers"\n\nparameters:\n do_region: "nyc3"\n aws_region: "us-east-1"\n hetzner_location: "nbg1"\n web_server_count: 3\n\nphases:\n # Phase 1: Create backup storage first (independent)\n - name: "provision-backup-storage"\n provider: "hetzner"\n description: "Create backup storage volume in Hetzner"\n\n operations:\n - id: "create-backup-volume"\n action: "create-volume"\n config:\n name: "webapp-backups"\n size: 500\n location: "{{ hetzner_location }}"\n format: "ext4"\n\n tags: ["storage", "backup"]\n\n on_failure: "alert"\n on_success: "proceed"\n\n # Phase 2: Create database (independent, but must complete before app)\n - name: "provision-database"\n provider: "aws"\n description: "Create managed PostgreSQL database"\n depends_on: [] # Can run in parallel with Phase 1\n\n operations:\n - id: "create-rds-instance"\n action: "create-db-instance"\n config:\n identifier: "webapp-db"\n engine: "postgres"\n engine_version: "14.6"\n instance_class: "db.t3.medium"\n allocated_storage: 100\n multi_az: true\n backup_retention_days: 30\n\n tags: ["database", "primary"]\n\n - id: "create-security-group"\n action: "create-security-group"\n config:\n name: "webapp-db-sg"\n description: "Security group for RDS"\n\n depends_on: ["create-rds-instance"]\n\n - id: "configure-db-access"\n action: "authorize-security-group"\n config:\n group_id: "{{ create-security-group.id }}"\n protocol: "tcp"\n port: 5432\n cidr: "10.0.0.0/8"\n\n depends_on: ["create-security-group"]\n\n timeout: 60\n\n # Phase 3: Create web tier (depends on database being ready)\n - name: "provision-web-tier"\n provider: "digitalocean"\n description: "Create web servers and load balancer"\n depends_on: ["provision-database"] # Wait for database\n\n operations:\n - id: "create-droplets"\n action: "create-droplet"\n config:\n name: "web-server"\n size: "s-2vcpu-4gb"\n region: "{{ do_region }}"\n image: "ubuntu-22-04-x64"\n count: "{{ web_server_count }}"\n backups: true\n monitoring: true\n\n