VeUP
← All case studies
Machine Learning · Glue ML data-plane ETL
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
AWS GlueAWS Step FunctionsAmazon S3AWS PrivateLink

An AI moderation platform is only as good as its feature and training data. VeUP built GoBubble’s AWS-native ML data plane: an Amazon S3 data lake (SSE-KMS encrypted, Intelligent-Tiering) feeding a Snowflake-on-AWS feature warehouse over AWS PrivateLink, with approximately 85 ML/ETL pipelines translated from GCP-coupled orchestration onto AWS Glue, AWS Step Functions, and Amazon EventBridge.

The challenge

GoBubble’s models depend on a continuous supply of features and training data produced by dozens of interdependent pipelines that had grown up inside GCP’s orchestration. Migrating them was the riskiest part of the platform move: every pipeline had to produce byte-equivalent outputs on AWS, on schedule, or model quality would silently degrade — and the whole translation had to land inside the same fixed 12-week window as the rest of the estate, with the moderation product running live throughout.

The solution

VeUP re-founded the data plane on AWS-native services. Feature and training data land in an Amazon S3 ML data lake encrypted with SSE-KMS and cost-managed by Intelligent-Tiering; the analytical and feature warehouse is Snowflake on AWS, reached privately over AWS PrivateLink; and the ~85 pipelines were translated onto AWS Glue for ETL, with Snowpark Python carrying the transforms, AWS Step Functions expressing the orchestration logic, and Amazon EventBridge driving schedules and triggers. Translation was governed by an operator-mapping discipline — each legacy pipeline’s behavior mapped explicitly onto its Glue/Step Functions equivalent — and validated the only way that counts: a 14-day feature-data parity-overlap window ran both planes side by side and compared outputs, returning a Pass before the legacy plane was retired. The cutover was zero-downtime, and the platform runs in production on the AWS-native data plane today.

Production outcomes

KPIResult
Pipeline translation~85 ML/ETL pipelines moved onto AWS Glue + Step Functions + EventBridge with Snowpark transforms — the platform’s full data production re-homed to AWS-native orchestration.
Parity proof14-day feature-data parity-overlap window comparing legacy and AWS outputs returned a Pass — model-feeding data proven equivalent before the old plane was switched off.
Data-plane postureSSE-KMS encryption and Intelligent-Tiering on the S3 lake, PrivateLink to the warehouse — security and storage economics designed into the plane, delivered zero-downtime inside the fixed migration window.
Lessons & continuationML data planes migrate on proof, not confidence — run the parity overlap and make retirement conditional on the pass; explicit operator mapping is what turns 85 bespoke pipelines into one repeatable translation method.
AWS services in production
AWS GlueAWS Step FunctionsAmazon EventBridgeAmazon S3 (SSE-KMS, Intelligent-Tiering)AWS PrivateLinkAWS KMSAmazon CloudWatch
Alongside
Snowflake on AWS (Snowpark)