I want to share how we migrated from Google App Engine to Google Cloud Run. Besides reducing our Google Cloud bill by 50%, we now enjoy better observability.
The migrated app was an Angular SPA with a NodeJS backend connected to a Google SQL database and a couple of cron jobs. We started with Google App Engine because it was easy to set up and required no additional CI/CD setup. After a bit more than a year, our monthly bill climbed to over 1000€, and with over 20 requests/s at peak hours, we occasionally saw "Bad Gateway" errors, which were hard to debug. Additionally, a few things about App Engine annoyed us:
After some research, we decided to migrate to Google Cloud Run, which is a more up-to-date product.
Because our application is stateless, we could run the application both on App Engine and Cloud Run in parallel. So, migration was more or less only DNS changes. The hard part was setting up custom domains for Cloud Run. We decided to go for an External Application Load Balancer as custom domain mapping was still in beta and not available for our region. I hope this is soon available as this would make things a lot easier – similar to how it was using App Engine. Additionally, cron jobs had to be migrated to Cloud Scheduler. This was done after everything was running smoothly.
The migration itself was really smooth. With a total downtime of no more than 10 minutes due to DNS changes, our impact on business was minimal.
We reduced our monthly bill by 50% while enjoying a better developer experience with better metrics.