How much does it cost to run WordPress at scale on AWS?
A WordPress site doing 2 million page views a month costs about 825 dollars on AWS, and full-page caching cuts that to around 650. Here is the component breakdown and why the database is the fragile part.
Quick answer
A WordPress site serving 2 million page views and 400,000 visitors a month costs roughly 825 dollars a month on AWS, or 0.41 dollars per thousand page views. The biggest lines are the CDN at 280 dollars, the app tier at 152 dollars, and the database at 136 dollars. Adding full-page caching at the edge cuts the app tier from 2.5 instances to 1 and lets the database drop two sizes, bringing the total to about 650 dollars. The largest risk is not cost but the database: uncached WordPress generates 30 to 60 queries per page view, so a caching failure can take the site down before it takes the budget up.
WordPress at scale is a caching problem dressed up as a hosting problem. The software will happily generate every page from scratch on every request, running dozens of database queries to do it. Almost all the money in a WordPress architecture is spent either on caching or on the compute you need because caching is not working.
The workload we are pricing
Assume a content site in us-east-1 with 2 million page views and 400,000 unique visitors a month. There are roughly 8,000 published posts, 50 GB of media in the library, and around 20 editors publishing 100 pieces a month. Average page weight is 1.5 MB including images, giving about 3 TB of CDN egress. The site runs a commercial theme and about 25 plugins, which is typical and which is why the database is busier than a clean install would be.
The monthly breakdown
| Component | Specification | Monthly cost |
|---|---|---|
| CDN | CloudFront 3 TB plus 25M requests | $279.87 |
| App tier | 2 to 3 x t3.large, 2.5 average | $151.85 |
| Database | RDS MySQL db.m5.large plus 100 GB gp3 | $136.33 |
| Load balancer | ALB plus about 8 LCU | $63.15 |
| Logs and metrics | 100 GB ingest plus retention | $53.00 |
| Object cache | ElastiCache cache.t4g.medium | $46.72 |
| NAT gateway | 1 gateway plus 200 GB processed | $41.85 |
| WAF and DNS | Web ACL, 3 rules, 25M requests, Route 53 | $23.50 |
| Shared file storage | 50 GB EFS for wp-content | $15.00 |
| Backups | 200 GB of snapshots | $10.00 |
| Media offload | 50 GB S3 plus requests | $4.15 |
| Total | $825.42 |
Full-page caching changes the whole shape
The table above assumes object caching (query results cached in Redis) but pages still rendered by PHP on every request. Two million page views a month is about 0.77 requests per second average and maybe 15 per second at peak, and each uncached page view is 30 to 60 database queries plus PHP execution. That is what keeps 2.5 t3.large instances and a db.m5.large busy.
Turn on full-page caching at the CDN, with a sensible TTL and cache invalidation on publish, and the picture inverts. A 95 percent edge hit ratio means the origin sees 100,000 page renders a month instead of 2 million, which one t3.large handles with room to spare, and the database drops to db.t3.medium.
| Line | Object cache only | Plus full-page cache |
|---|---|---|
| App tier | $151.85 | $60.74 |
| Database | $136.33 | $61.14 |
| Load balancer | $63.15 | $28.11 |
| Everything else | $474.09 | $474.09 |
| Total | $825.42 | $624.08 |
That is a 24 percent saving from a configuration change. The complication is logged-in users and personalized content, which cannot be served from a shared edge cache. Most content sites have very few logged-in visitors, so a cache rule that bypasses the edge cache when a session cookie is present gives you the saving for the 99 percent while keeping the 1 percent correct.
The database is the fragile part
A db.m5.large at 136 dollars is not an extravagant database, but WordPress makes it work hard. Autoloaded options, plugin-generated transients, and post meta queries are the usual culprits. The failure mode is not gradual: when the cache expires across many keys at once, or a crawler hits uncached archive pages, query volume spikes 10x and the database saturates. The instinct is to upsize, which doubles the cost to 273 dollars and treats the symptom.
A read replica at 124.83 dollars is a better answer for read-heavy content sites, since almost all WordPress traffic is reads and a replica absorbs archive and search queries. The economics are covered inread replica cost. Better still is fixing the autoload table, which is free.
Where the remaining money goes
After caching, the CDN at 280 dollars is 45 percent of the bill and responds to the same image work that helps any content site: modern formats, responsive sizes, lazy loading below the fold. Cutting page weight from 1.5 MB to 900 KB takes egress from 3 TB to 1.8 TB and the CDN line to about 170 dollars. The EFS volume at 15 dollars for wp-content is worth revisiting too; offloading the media library entirely to object storage removes the shared filesystem and makes instances genuinely stateless.
At 825 dollars for 2 million page views, hosting costs 0.41 dollars per thousand views; after caching and image work, about 0.22 dollars. For a site monetizing at a 5 dollar RPM, that is 4 percent of revenue falling to 2 percent. Price the architecture from Terraform against theresource catalog before the next traffic milestone so the scaling step is planned rather than reactive.
FAQ
How much does it cost to run WordPress at scale on AWS?
About 825 dollars a month for a site serving 2 million page views and 400,000 visitors, with an auto-scaled app tier, a managed MySQL database, an object cache, a load balancer, 3 TB of CDN egress, WAF, shared file storage, and backups. That is 0.41 dollars per thousand page views. Adding full-page caching at the edge brings it to about 624 dollars.
How much does full-page caching save on WordPress hosting?
About 24 percent, or 200 dollars a month on this workload. A 95 percent edge hit ratio means the origin renders 100,000 pages a month instead of 2 million, which lets the app tier drop from 2.5 instances to one and the database from db.m5.large to db.t3.medium. The caveat is logged-in users, who need a cache bypass rule keyed on the session cookie.
What is the biggest WordPress hosting cost on AWS?
The CDN, at about 280 dollars a month for 3 TB of egress, which is 34 percent of the bill before caching work and 45 percent after. Page weight drives it directly: reducing average page size from 1.5 MB to 900 KB through modern image formats, responsive sizing, and lazy loading takes egress to 1.8 TB and the CDN line to roughly 170 dollars.
Why does WordPress need such a large database instance?
Because uncached WordPress generates 30 to 60 database queries per page view, and a typical site with a commercial theme and 25 plugins adds autoloaded options, transients, and post meta queries on top. The failure mode is sudden rather than gradual: mass cache expiry or a crawler hitting uncached archive pages can spike query volume tenfold and saturate the instance.
Should I add a read replica for WordPress?
For a read-heavy content site, a read replica at about 125 dollars a month is usually a better answer than doubling the primary instance size at 137 dollars, because nearly all WordPress traffic is reads and a replica absorbs archive, search, and crawler queries. Before either, check the autoloaded options table, which is frequently the real problem and costs nothing to fix.
How does C3X help price a WordPress architecture?
C3X reads your Terraform and prices the app instances, database, cache, load balancer, CDN distribution, shared storage, and NAT gateway against a live catalog. Because WordPress cost is dominated by whether caching works, seeing the instance and database sizing costed alongside the caching configuration makes the trade-off explicit before the traffic milestone rather than after.
What to do next
Plan your next traffic milestone with real numbers. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.
Share this post
Try C3X on your own Terraform
Free and open source. No API key required. One command to install, one command to estimate.