After four months of running a fully self-hosted Ghost CMS on AWS, I made a decision that might seem counterintuitive: I moved to Ghost Pro managed hosting. But here's the thing—I kept all the custom Lambda-powered features I'd built. This post documents that migration and explains why the hybrid approach makes sense.

Why Move Away from Self-Hosted?

Running Ghost on AWS taught me a lot about ECS, Aurora Serverless, and CloudFront configuration. The infrastructure worked well. Posts published, newsletters sent, images served from S3. But operational overhead accumulated.

Aurora Serverless charges added up even during idle periods. The NAT Gateway ran constantly for container egress. ECS tasks needed monitoring. Database backups required verification. And when Ghost released ActivityPub federation support, I discovered that CloudFront sitting in front of Ghost broke the WebFinger protocol that federation depends on.

The final push came from looking at my AWS bill. October 2025 cost $207 for infrastructure alone. Add $35 for Mailgun (Ghost requires external email for newsletters), and I was spending $242 monthly to run a blog.