Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Multi-Cloud Migration: A Step-by-Step Plan

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.

Multi-Cloud Migration OverviewLegacyVM or single cloudAssessApps and data mapPlanWaves and SLOsCloud AWeb and API tierCloud BData and batch jobsShared control planeDNS, IaC, secrets, observability
Multi-Cloud Migration: A Step-by-Step Plan starts with assessment, then splits workloads across clouds under one shared control plane.

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.

SignalLower riskHigher risk
StateStateless API, CDN-backed assetsLocal disk sessions, sticky files
DatabaseManaged MySQL with read replicaCross-region writes, custom triggers
TrafficLow seasonal varianceFlash sales, court filing deadlines
CompliancePublic marketing siteClient documents, payment PCI scope
TeamIaC and runbooks existManual 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.

  1. Discover — inventory, dependencies, compliance, and cost baseline.
  2. Design — target topology, landing zones, network, identity, and wave order.
  3. Build — provision infrastructure with Terraform; configure CI/CD and secrets.
  4. Migrate — move data and apps in waves; keep source running in parallel.
  5. Validate — functional, performance, security, and DR tests on the target.
  6. 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.

Six Migration PhasesDiscoverDesignBuildMigrateValidateCutover and OperateDNS, hypercare, FinOps, SRE handoffParallel source environmentKeep running until validate passes and rollback window closesRollback path required at every phase gate
Each phase in Multi-Cloud Migration: A Step-by-Step Plan gates the next; parallel running and rollback stay active through validate.

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.

Migration Strategy CompareBig bangSingle cutover windowHigh blast radiusHard rollbackTeam burnout riskWave planIncremental movesLearn per waveTested rollbackLower downtimeRecommended: wave-based Multi-Cloud Migration plan
Wave-based Multi-Cloud Migration reduces blast radius compared with a single big-bang cutover across providers.

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.

Cutover Decision TreeDNS switchError rate OK?YesHypercareMonitor 72 hoursNoRollback DNSRestore DB if neededClose rollback window after stable SLOs
Multi-Cloud Migration cutover succeeds when error-rate gates trigger rollback automatically instead of debate.

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

Moving applications, data, and operations from one environment into two or more public clouds such as AWS, Google Cloud, Azure, or regional hosts like Akamai, Linode, and Vultr.

Start with intent, not provider logos. Valid drivers include vendor concentration risk, data residency requirements, specialised managed services, and price arbitrage for batch or storage tiers. Invalid drivers include resume-driven architecture or planning for a second cloud without a named workload. I've seen teams spend Rs 800,000 (~USD 6,000) on dual landing zones before they had an actual second-tenant requirement — that budget usually belongs in backups and query tuning first. Multi-cloud spreads workloads across public clouds as peers; it is not the same as hybrid cloud, which keeps private infrastructure connected to one public cloud.

Use six named phases, each with entry criteria, exit criteria, and a rollback note. Do not start phase N+1 until N is signed off. Discover covers inventory, dependencies, compliance, and cost baseline. Design defines target topology, landing zones, network, identity, and wave order. Build provisions infrastructure with Terraform and configures CI/CD and secrets. Migrate moves data and apps in waves while keeping the source running in parallel. Validate runs functional, performance, security, and DR tests on the target. Cut over and operate handles DNS switch, a hypercare window, and FinOps plus observability from day one.

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.

Treat assessment as a two-week sprint with clear owners — skipping discovery causes cutover failures that look like DNS bugs but are really dependency gaps. Build a workload inventory listing every application, cron job, integration, and static asset with runtime, traffic pattern, RPO/RTO, and data classification. Map outbound dependencies including payment gateways, SMS APIs, webhooks, and internal admin URLs; grep your codebase for hard-coded IPs and hostnames. Score 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.

A landing zone is your baseline account layout on each cloud provider: VPC or VNet, subnets, IAM roles, logging, and guardrails. Build one per provider and 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, following HashiCorp's provider alias pattern. Split Terraform state files per cloud and per environment to limit blast radius. Provision landing zones before migrating applications; never migrate production data into hand-built console configurations.

Wave planning reduces blast radius compared with a single cutover across all providers at once. 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. On booking platforms like Adventure Third Pole Trek, moving the public site first kept supplier CRM integrations online and prevented lost reservations during DNS propagation.

For Laravel 12 or 13 on PHP 8.3+, mirror the runtime first: match extensions like redis, intl, and gd, OPcache settings, and queue workers. Deploy with Deployer 7 and GitLab CI once SSH keys and .env secrets exist in the target vault. 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. After env changes, reload PHP-FPM to clear stale OPcache bytecode — teams forget this step most often on Apache plus PHP-FPM stacks.

For MySQL 9.7 or MariaDB 12.3, start with a full dump plus continuous replication or native logical replication. PostgreSQL 18 follows the same rhythm: initial sync, change data capture, then a short write freeze at cutover. Verify row counts, checksum samples, and slow-query baselines before flipping connection strings. The production pattern is replicate, sync, validate, cut over, and keep rollback ready for TTL hours. Take a fresh backup immediately before each wave and test restore on the target cloud, not only on the source.

Handle DNS and traffic routing last in the migration sequence. Lower TTL to 300 seconds at least 24 hours before cutover. Use weighted or geolocation records when splitting traffic gradually across providers. Assign a named DNS owner in your cutover runbook alongside cutover lead, database owner, and comms owner. Health checks and failover patterns prevent split-brain during partial migrations. After connection string changes, allow DNS propagation time within your rollback window before declaring the cutover complete.

Multi-cloud uses multiple public clouds as peers. Hybrid cloud keeps private infrastructure connected to one public cloud. The distinction matters for networking, identity, and cost models.

Migration windows are high-value attack surfaces — temporary firewall rules, shared admin passwords, and copied production dumps multiply risk. Use short-lived credentials per cloud and centralise secrets in one vault with audit logs. Rotate API keys for payment gateways when egress IPs change; eSewa, Khalti, and Stripe callbacks often whitelist source addresses. Apply zero-trust patterns: mTLS or signed tokens between services, no flat VPN trust, and least-privilege IAM roles per workload. If client documents must stay in-region, pin storage and database regions explicitly and build data-flow diagrams during design, not during audit.

Validation is a scripted gate, not ad-hoc browser clicks. Run smoke tests for login, checkout, file upload, and webhooks with recorded HAR files. Load test at 1.5× expected peak and 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 versus UTC bites often. Verify email deliverability SPF and DKIM from the new sending IP or relay. Run a game-day restore from backup on the target environment. Cutover succeeds when error-rate gates trigger rollback automatically instead of debate.

Tag every resource with env, app, owner, and cost-center on day one — untagged multi-cloud spend becomes impossible to optimise within a month. Centralise logs and metrics early; without unified observability you debug incidents twice, once per cloud. Align on-call runbooks and escalation paths before hypercare ends. Engage support during the hypercare window if your team lacks 24/7 coverage; a missed queue worker restart costs more than retained support at roughly Rs 15,000–25,000 per month (~USD 110–185). FinOps discipline starts the day after cutover, not when finance receives the first surprise invoice.

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 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 benchmark phases against vendor-neutral checklists, but adapt them rather than treating them as gospel.

Share this article

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.

Quick Contact Options
Choose how you want to connect me: