VeUP
← All case studies
Machine Learning · GPU ML inference platform
GoBubble logo

GoBubble migrates 21 workloads from GCP to Amazon EKS with zero downtime

Cloud-to-cloud migrationZero-downtime migrationPhased cutover with parity validationGPU capacity & inference economicsContainer platform modernizationEvent-driven architectureInfrastructure observabilityCentralized workforce identityPreventive controlsPrivate connectivity & network isolationCross-region & multi-AZ replicationWeb application firewall & bot mitigationInfrastructure-as-code foundationCI/CD delivery pipeline automationCDN & edge delivery architectureGitHub ActionsSecrets management & credential elimination
Zero
downtime — the whole estate cut over live
21
workloads migrated GCP → AWS in sequenced waves
Amazon EKS (GPU)Snowflake on AWSAWS Step FunctionsAmazon RDS for PostgreSQL

VeUP moved GoBubble’s Emotional-AI and content-moderation SaaS off GCP onto a production GPU-optimized ML inference plane on Amazon EKS — dedicated GPU node groups scaling independently of the general-purpose Graviton compute — and translated its Airflow data pipelines to Snowpark and AWS Step Functions, with a zero-downtime cutover for the live moderation workload.

The challenge

GoBubble ran its Emotional-AI moderation SaaS on GCP and needed to move to AWS without disrupting production ML inference — landing a GPU-optimized inference plane whose capacity could grow independently of the rest of the platform, and a modern feature/training-data pipeline to replace GCP-coupled Airflow orchestration. Scaling AI workloads cost-effectively gated the product economics, and the company’s EMEA and MENA growth plans needed a platform with the right regional footprint.

The solution

A GCP-to-AWS migration and modernization landing a production ML inference plane on Amazon EKS in eu-central-1: the Triton multimedia-moderation server, spam detector, and EmoAI dispatcher run on a dedicated fleet of GPU node groups scaled independently by the Horizontal Pod Autoscaler and Cluster Autoscaler, while general-purpose services run on Graviton compute for price-performance — so inference capacity grows without inflating the rest of the estate. Feature and training data land in an Amazon S3 data lake (SSE-KMS) feeding Snowflake on AWS, with the Airflow data pipelines translated to Snowpark Python, Snowflake Tasks, and AWS Step Functions via an operator-translation matrix, and a data-parity test harness used at validation. The application and data tier runs on Amazon RDS for PostgreSQL (Multi-AZ, KMS) with CloudFront at the edge. Security: root MFA, all-region CloudTrail, AWS Config and Security Hub, KMS encryption at rest. Observability: CloudWatch dashboards and alarms tied to inference-plane health KPIs, including error rates and latency against SLA.

GoBubble — Machine Learning lens on the target state. The deployed eu-central-1 estate re-weighted for the Machine Learning designation: EC2 GPU node groups (G5/A10G) in both AZs running Triton multimedia-moderation, spam-detector and the EmoAI dispatcher; the S3 ML data lake and model-artifact buckets; Snowflake on AWS over PrivateLink with Snowpark feature building; EventBridge, Step Functions and Glue orchestrating ~85 ML/ETL pipelines; HPA plus Cluster Autoscaler GPU scaling with DCGM metrics into CloudWatch and Grafana — edge, DNS and org-security rail de-emphasised.
The ML view of the same estate — GPU inference plane, feature/training-data plane and ML/ETL orchestration plane foregrounded; edge and governance chrome steps back.

Production outcomes

KPIResult
Production outcomesZero-downtime cutover of the live ML moderation workload from GCP to AWS, across all 21 workloads; production ML inference serving on dedicated EKS GPU node groups scaled independently of general-purpose Graviton compute; Airflow data pipelines translated to Snowpark + Snowflake Tasks + AWS Step Functions, with a data-parity test harness proving the cutover. GoBubble’s inference-plane metrics stay private to GoBubble.
Engagement windowA 12-week migration from kickoff in February 2025, plus two weeks of extended support; ML inference has run live on EKS GPU node groups since June 2025, with the data-pipeline modernization delivered inside the extended-support window and the relationship ongoing.
Cost / TCO posture$381,248/yr projected run-rate for the target environment (projected, AWS Pricing Calculator). Levers: independently scaling GPU node groups so inference capacity is bought only where needed, Graviton general-purpose compute, S3 data-lake tiering, and pay-as-you-go economics aligned to a startup’s funding profile.
Lessons & continuationGPU inference economics are the load-bearing concern for an AI SaaS — separate the GPU fleet from general-purpose compute so each scales on its own signal; a data-parity test harness is what makes a zero-downtime ML cutover provable; translating GCP-coupled Airflow operators to Snowpark and Step Functions removes brittle Composer DAG dependencies.
AWS services in production
Amazon EKS (GPU node groups + Graviton)Amazon S3AWS Step FunctionsAmazon RDS for PostgreSQL (Multi-AZ)Amazon CloudFrontAWS KMSAmazon CloudWatch
Alongside
Snowflake on AWS