This AWS to GCP migration addressed procurement, logistics, contract management, and financial operations. As the application grew, performance issues, operational complexity, and infrastructure costs also increased. To address these challenges, the application was migrated to Google Cloud Platform (GCP) using a cloud-native architecture.
In this project, the application was migrated an enterprise procurement and logistics platform from Amazon Web Services (AWS) to Google Cloud Platform (GCP). The platform, built with Angular and .NET 8, supports procurement deals, vessel planning, contract approvals, financial workflows, and document management for large-scale business operations.
The migration focused on five key objectives:
Although the application was stable on AWS, several operational challenges began affecting business productivity.
Some of the major issues included:
These challenges made it clear that a reactive fix wouldn’t be enough, so the team began mapping out a full AWS to GCP migration. That evaluation centered on a Google Cloud migration as the long-term solution to performance, cost, and scalability concerns.
The application was designed using multiple managed AWS services. While this architecture provided scalability, it also introduced operational complexity because business functionality was distributed across several services.
The platform relied on multiple AWS managed services, including:
While these services provided scalability, the overall architecture became increasingly complex and expensive to maintain.
Instead of performing a simple lift-and-shift migration, the team redesigned the platform using cloud-native GCP services.
The new architecture included:
| AWS | Google Cloud |
|---|---|
| AWS Lambda | Cloud Run |
| Aurora (MySQL) | Cloud SQL (MSSQL) |
| S3 | Cloud Storage |
| Code Deploy | Cloud Build |
| Container Registry | Artifact Registry |
| Event Bridge | Cloud Scheduler |
| API Gateway | API Gateway |
| WAF | Cloud Armor |
| CloudWatch | Cloud Logging & Monitoring |
| CloudTrail | Cloud Audit Logs |
| IAM | IAM & Service Accounts |
Azure DevOps continued to be used as the source code repository while integrating with GCP deployment pipelines.
One of the biggest architectural improvements was moving from serverless functions to containerized services. Each API was packaged as an independent Docker container and deployed through Cloud Build into Cloud Run.
Initially, Cloud Functions were evaluated, but runtime and port-binding limitations made them unsuitable for the application’s API workload.
The solution involved:
This approach resulted in a highly scalable API platform with simplified deployments and improved operational stability.
Database performance was one of the largest pain points. Several stored procedures were reviewed and optimized during migration to reduce execution time and improve query plans.
The previous Aurora (MySQL) environment experienced stored procedure timeouts and inconsistent query performance.
To address this, the team:
The outcome was immediate:
Document upload and download operations required stronger security after migration.
The implementation included:
This resulted in reliable and secure document access while maintaining scalability.
Instead of maintaining custom logging infrastructure, Cloud Run’s native logging capabilities were adopted.
Benefits included:
Operational visibility improved significantly with minimal configuration.
Microsoft SSO integration required additional HTTPS forwarding configuration because Cloud Run operates behind a managed load balancer.
The implementation included:
This enabled a secure and seamless single sign-on experience for enterprise users.
Background jobs previously managed using AWS EventBridge were migrated to Cloud Scheduler.
Cloud Scheduler securely invokes Cloud Run services using authenticated HTTP requests with service accounts, providing reliable execution of scheduled business processes.
For a deeper look at scheduling strategies, see our guide on NCrontab and Customization.
The AWS to GCP migration delivered measurable improvements across the platform.
Reliability
During this migration, several practical observations helped improve the final solution.
This AWS to GCP migration was not simply a change of cloud provider—it was a complete modernization of the platform.
By adopting Cloud Run, Cloud SQL, Cloud Build, Cloud Armor, and other managed GCP services, the team delivered a solution that is faster, more secure, easier to operate, and more cost-efficient.
The migration not only replaced AWS services with their GCP equivalents but also simplified deployment, improved database performance, reduced operational overhead, and provided a scalable platform for future enhancements.
Q: What does an AWS to GCP migration typically involve?
A: It means redesigning cloud-native services, not just moving infrastructure — in this case, replacing AWS Lambda, Aurora, and EventBridge with Cloud Run, Cloud SQL, and Cloud Scheduler on GCP.
Q: What replaced AWS Lambda in the new architecture?
A: Cloud Run. The team containerized every .NET 8 API with Docker instead of using serverless functions, which gave more flexibility for the app’s workload.
Q: Why was Cloud SQL chosen over Aurora (MySQL)?
A: Aurora was causing stored procedure timeouts and inconsistent query performance. Migrating to Cloud SQL (MSSQL) and optimizing procedures fixed both issues.
Q: How are scheduled background jobs handled now?
A: Cloud Scheduler replaced AWS EventBridge, triggering Cloud Run services via authenticated HTTP requests with service accounts.
Q: Did the migration affect security or compliance?
A: Yes — Cloud Armor, IAM-based access control, HTTPS enforcement, and centralized audit logging replaced the equivalent AWS WAF/IAM/CloudTrail setup.