
September 11, 2026
13 min read
By Kokil Thapa | Last reviewed: September 2026
Multi-Cloud Migration: A Step-by-Step Plan is what you need when a single vendor no longer matches your risk, pricing, or compliance goals. You might run Laravel on one provider, Redis on another, and object storage elsewhere. That split sounds clean on a whiteboard. In production it becomes DNS, state, secrets, billing, and rollback paths that must work under pressure. This guide walks through a plan I use on real client projects: assess honestly, migrate in waves, validate before cutover, and keep a tested rollback ready.
What is multi-cloud migration and when does it make sense?
Multi-cloud migration means moving applications, data, and operations from one environment into two or more public clouds. The source is often a single cloud, on-prem VMs, or shared hosting. The target spreads workloads across providers such as AWS, Google Cloud, Azure, or regional hosts like Akamai/Linode and Vultr.
Start with intent, not logos. Read when a multi-cloud strategy actually makes sense before you commit budget. Common valid drivers include vendor concentration risk, data residency, specialised managed services, and price arbitrage for batch or storage tiers.
Invalid drivers include resume-driven architecture and "we might need GCP someday" without a named workload. I've seen teams spend Rs 800,000 (~USD 6,000) on dual landing zones before they had a second cloud tenant requirement. That money should have gone to backups and query tuning first.
Multi-cloud is not the same as hybrid cloud. Hybrid keeps private infrastructure connected to one public cloud. Multi-cloud uses multiple public clouds as peers. The distinction matters for networking, identity, and cost models. See hybrid cloud vs multi-cloud differences for a side-by-side view.
Pair this overview with multi-cloud architecture fundamentals so your migration target is defined before you lift a VM.
How do you assess readiness before starting multi-cloud migration?
Discovery is the step most teams rush. Skipping it causes cutover failures that look like DNS bugs but are really dependency gaps. Treat assessment as a two-week sprint with clear owners.
Build a workload inventory
List every application, cron job, integration, and static asset. For each row capture runtime (PHP 8.3+, Node.js 26 LTS, MySQL 9.7), traffic pattern, RPO/RTO, and data classification. Export configs into JSON and sanity-check structure with a JSON formatter before you store them in your migration repo.
Map dependencies and hidden coupling
Draw outbound calls: payment gateways, SMS APIs, webhooks, and internal admin URLs. On legal-tech portals I've maintained, a "simple" site move failed because a PDF generator called a hard-coded internal IP. grep your codebase for IPs, hostnames, and `.env` keys tied to one region.
Score migration complexity
Rank each workload as rehost, replatform, or refactor. Stateless Laravel APIs rehost cleanly. Magento 2.4.x stores often need replatforming around media, cron, and search. Refactor only when business rules force it — not because microservices look modern.
| Signal | Lower risk | Higher risk |
|---|---|---|
| State | Stateless API, CDN-backed assets | Local disk sessions, sticky files |
| Database | Managed MySQL with read replica | Cross-region writes, custom triggers |
| Traffic | Low seasonal variance | Flash sales, court filing deadlines |
| Compliance | Public marketing site | Client documents, payment PCI scope |
| Team | IaC and runbooks exist | Manual SSH changes, unknown cron |
If your inventory lives on a single Ubuntu box you manage yourself, loop in Linux system administration expertise early. Wrong PHP-FPM pool sizing on the target cloud looks like an app bug.
What are the six phases of a multi-cloud migration plan?
Use six named phases. Each phase has entry criteria, exit criteria, and a rollback note. Do not start phase N+1 until N is signed off.
- Discover — inventory, dependencies, compliance, and cost baseline.
- Design — target topology, landing zones, network, identity, and wave order.
- Build — provision infrastructure with Terraform; configure CI/CD and secrets.
- Migrate — move data and apps in waves; keep source running in parallel.
- Validate — functional, performance, security, and DR tests on the target.
- Cut over and operate — DNS switch, hypercare window, FinOps and observability.
Document the plan in a runbook your on-call engineer can follow at 2 a.m. Store it beside your IaC repo, not in a slide deck.
Design landing zones before you migrate apps
A landing zone is your baseline account layout: VPC/VNet, subnets, IAM roles, logging, and guardrails. Build one per cloud provider. Use separate accounts or projects per environment — production must not share a network with experiments.
Manage landing zones with Terraform provider aliases so one repo can target multiple clouds. HashiCorp documents this pattern in their Terraform provider alias configuration guide. Split state files per cloud and per environment to limit blast radius. See also managing multi-cloud state with Terraform for backend and locking choices.
Define waves, not a big bang
Wave 1 should be low-risk and observable: static sites, internal tools, or read-heavy APIs. Wave 2 carries transactional apps. Wave 3 holds data-heavy systems and integrations with strict RPO. Never put payment webhooks and database cutover in the same maintenance window until you have rehearsed twice.
How do you migrate applications and data across cloud providers?
Migration mechanics differ by workload type. The pattern that survives production is: replicate, sync, validate, cut over, and keep rollback for TTL hours.
Rehost Laravel and PHP applications
For Laravel 12 or 13 apps on PHP 8.3+, mirror the runtime first. Match extensions (`redis`, `intl`, `gd`), OPcache settings, and queue workers. I deploy with Deployer 7 and GitLab CI on several production sites — the same pipeline can target a new host once SSH keys and `.env` secrets exist in the target vault.
# Example: Deployer host block for new cloud target
host('prod-cloud-a')
->setHostname('app-a.example.com')
->setRemoteUser('deploy')
->setDeployPath('/var/www/app')
->set('branch', 'main')
->set('php_version', 'php8.3'); Run `php artisan config:cache` and `route:cache` on the target only after env vars are verified. A common post-migration failure is `APP_URL` still pointing at the old domain, which breaks signed URLs and webhooks.
Migrate MySQL and PostgreSQL with minimal downtime
For MySQL 9.7 or MariaDB 12.3, start with a full dump plus continuous replication or native logical replication. PostgreSQL 18 migrations follow the same rhythm: initial sync, change data capture, then a short write freeze at cutover.
Read MySQL to PostgreSQL migration considerations even if you stay on MySQL — the cutover checklist transfers. Verify row counts, checksum samples, and slow-query baselines before you flip connection strings.
Move object storage and CDN assets
Sync buckets with `rclone` or vendor replication tools. Keep old URLs alive with redirects until search engines and partner systems refresh. For WooCommerce or Magento media libraries, inventory missing files — I've seen 404 product images after "successful" migrations because thumbnail paths differed.
Handle DNS and traffic routing last
Lower TTL to 300 seconds at least 24 hours before cutover. Use weighted or geolocation records when you split traffic gradually. Cross-cloud DNS and traffic routing covers health checks and failover patterns that prevent split-brain during partial migrations.
On booking platforms like Adventure Third Pole Trek, wave planning kept supplier CRM integrations online while the public site moved first. That ordering prevented lost reservations during DNS propagation.
How do you secure and govern workloads during migration?
Migration windows are high-value attack surfaces. Temporary firewall rules, shared admin passwords, and copied production dumps to staging multiply risk.
Identity and secrets
Use short-lived credentials per cloud. Centralise secrets in one vault with audit logs. Rotate API keys for payment gateways when you change egress IPs — eSewa, Khalti, and Stripe callbacks often whitelist source addresses.
Apply zero-trust patterns for multi-cloud: mTLS or signed tokens between services, no flat VPN trust, and least-privilege IAM roles per workload.
Backups and disaster recovery before cutover
Take a fresh backup immediately before each wave. Test restore on the target cloud, not only on the source. Cloud backup and DR strategy should define RPO/RTO per tier before migration starts, not after an incident.
Compliance and data residency
If client documents must stay in-region, pin storage and database regions explicitly. Review DPA terms for each provider. Legal-tech portals I have worked on require clear data-flow diagrams for client onboarding — build those during design, not during audit.
How do you validate, cut over, and operate after multi-cloud migration?
Validation is a scripted gate. Cutover is a timed operation with a named rollback owner. Operations begin the day after hypercare ends.
Pre-cutover validation checklist
- Smoke tests for login, checkout, file upload, and webhooks with recorded HAR files.
- Load test at 1.5× expected peak; watch DB connections and queue latency.
- Compare error rates and p95 latency against a seven-day baseline.
- Confirm cron and scheduled tasks run in the target timezone (NPT vs UTC bites often).
- Verify email deliverability SPF/DKIM from the new sending IP or relay.
- Run a game-day restore from backup on the target environment.
Cutover runbook essentials
Assign roles: cutover lead, DNS owner, database owner, comms owner. Publish a minute-by-minute timeline. Freeze deploys 24 hours before switch unless the fix is migration-related.
# Example cutover snippet — connection string flip (Laravel .env)
DB_HOST=prod-db.cloud-b.example.com
DB_DATABASE=app_production
REDIS_HOST=redis.cloud-a.example.com
CACHE_STORE=redis
QUEUE_CONNECTION=redis After env changes, reload PHP-FPM to clear OPcache stale bytecode. On Apache + PHP-FPM stacks I maintain, `sudo systemctl reload php8.3-fpm` is the step teams forget most often.
Compare active-active vs active-passive failover before you pick a cutover style. Active-active vs active-passive multi-cloud explains when dual-write complexity is worth it.
Post-migration operations and FinOps
Tag every resource with `env`, `app`, `owner`, and `cost-center` on day one. Untagged multi-cloud spend becomes impossible to optimise within a month. Read multi-cloud cost management and FinOps before finance gets the first surprise invoice.
Centralise logs and metrics early. Without unified observability you will debug incidents twice — once per cloud. Align on-call runbooks and escalation paths before hypercare ends.
Engage support and maintenance if your team lacks 24/7 coverage during the hypercare window. A missed queue worker restart costs more than a week of retained support (~Rs 15,000–25,000/month, ~USD 110–185).
When to hire migration help
Bring in specialists when RPO is under 15 minutes, PCI scope is involved, or you migrate more than three interdependent systems at once. Website and platform migration services should deliver runbooks and IaC artefacts you keep — not a black-box handoff.
For greenfield enterprise modules during the same programme, pair migration with enterprise application development so new features do not land on the old stack by habit.
Reference architectures from AWS Cloud Migration and Google Cloud migration guidance help you benchmark phases against vendor-neutral checklists. Adapt them — do not treat them as gospel.
Sister legal-tech sites on shared Deployer pipelines (notarykathmandu.com, translationnepal.com) taught me one lesson repeatedly: identical deploy scripts across clouds only work when `.env`, storage mounts, and queue names are parameterised per target. Hard-coded paths break the second migration wave.
Notary Nepal and similar portals also need domain and hosting coordination when registrar glue records and SSL SANs span two providers.
Key Takeaways
- Start Multi-Cloud Migration: A Step-by-Step Plan with an honest inventory — dependencies and cron jobs kill more cutovers than cloud APIs do.
- Build landing zones and Terraform state per cloud before you move production data; never migrate into hand-built consoles.
- Use waves with parallel running, low DNS TTL, and a rehearsed rollback — big-bang cutovers are for disposable sandboxes only.
- Validate with load tests, webhook replay, and backup restores on the target cloud, not just functional clicks in a browser.
- Tag resources and centralise observability on day one; FinOps and incident response depend on it.
- Keep migration artefacts — runbooks, IaC, diagrams — inside your org; the plan is reusable for the next wave or provider.
People Also Ask
How long does a multi-cloud migration take?
A focused wave — one stateless app plus database — often takes four to eight weeks including discovery and validation. A full portfolio across two clouds commonly runs three to nine months. Duration grows with PCI scope, technical debt, and how many undocumented integrations you uncover in phase one.
What is the biggest risk in multi-cloud migration?
Data inconsistency at cutover is the highest-impact risk. Split-brain writes, missed queue jobs, and stale caches produce silent corruption. Mitigate with write freezes, replication lag monitors, and automated row-count checks before you repoint DNS.
Can you migrate without downtime?
Near-zero downtime is achievable for read-heavy sites with replicas and careful DNS routing. Write-heavy transactional systems usually need a short maintenance window. Promise zero downtime only after a dress rehearsal on production-scale data proves it.
Is multi-cloud migration worth the cost?
It is worth the cost when a named business driver — residency, failover, or service fit — clears a finance threshold. It is not worth it for abstract vendor fear alone. Model egress, dual management overhead, and engineer training before you sign contracts; compare against FinOps optimisation on a single cloud first.
Execute your multi-cloud migration with a plan you can roll back
Multi-Cloud Migration: A Step-by-Step Plan succeeds when discovery, waves, validation, and rollback are treated as engineering deliverables — not meeting notes. Build landing zones in Terraform, migrate low-risk workloads first, and cut over DNS only after metrics match your baseline. Keep hypercare staffed, tags enforced, and runbooks in the repo next to your application code.
If you want help scoping waves, writing cutover runbooks, or migrating Laravel and eCommerce workloads across clouds, contact us for a migration review. You can also explore API development and integration services when replatforming exposes brittle webhook or payment flows that should be fixed during the move.
Frequently Asked Questions
0 Comments
Leave a comment
Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

