If you’re looking for the full migration process (strategies, tools, step-by-step phases), see our complete AWS cloud migration guide. This post focuses purely on costs.
AWS migration cost breakdown: the two buckets
Every migration has two distinct cost categories that people often conflate:
- One-time project costs: the investment to actually move your workloads to AWS (consulting, engineering, tooling, testing)
- Ongoing infrastructure costs: what you pay AWS monthly after migration is complete
Most “cloud migration cost” articles only discuss one or the other. You need to model both before making a go/no-go decision.
One-time migration project costs
These are the costs of the migration itself: assessment, architecture design, infrastructure as code development, data migration, testing, cutover, and stabilisation.
By company size
| Scenario | Workloads | Strategy | Timeline | Cost range |
|---|---|---|---|---|
| Startup / single app | 1-3 apps, 1 database | Replatform to ECS Fargate + RDS | 3-6 weeks | €14,000 – €37,000 $15,000 – $40,000 |
| Growing SaaS | 5-10 apps, 2-3 databases, CI/CD rebuild |
Replatform + selective refactor |
2-3 months | €46,000 – €110,000 $50,000 – $120,000 |
| Mid-market | 10-20 apps, complex dependencies, compliance | Mixed 7R strategy | 3-6 months | €74,000 – €185,000 $80,000 – $200,000 |
| Enterprise | 20-100+ apps, multi-region, regulated | Full 7R with governance |
6-18 months | €185,000 – €460,000+ $200,000 – $500,000+ |
What’s included in the project cost
Project costs are shown in EUR (our billing currency) with USD equivalents. AWS infrastructure costs below are in USD as that’s how AWS bills globally.
- Assessment phase (3-10 days): infrastructure audit, dependency mapping, TCO model, strategy recommendation per workload
- Architecture & IaC (2-6 weeks): target architecture design, Terraform/Terragrunt module development, CI/CD pipeline configuration, multi-environment setup
- Migration execution (2-12+ weeks): server migration (MGN), database migration (DMS), application containerisation, DNS cutover
- Post-migration stabilisation (2-4 weeks): performance tuning, cost right-sizing, monitoring/alerting setup, knowledge transfer
Factors that increase project cost
| Factor | Cost impact | Why |
|---|---|---|
| Compliance requirements (SOC 2, ISO 27001, HIPAA) | +20-40% | Additional security controls, encryption, audit logging, documentation |
| Heterogeneous database migration (Oracle → PostgreSQL) | +€18,000–€46,000 per database | Schema conversion, stored procedure rewriting, data validation |
| Legacy monolith decomposition | +30-60% | Re-architecture is significantly more engineering than replatform |
| Multi-region deployment | +20-30% | Duplicate infrastructure, cross-region replication, failover testing |
| Zero-downtime requirement for 24/7 systems | +15-25% | Blue-green cutover, DMS continuous replication, extended parallel running |
Factors that decrease project cost
| Factor | Cost impact | Why |
|---|---|---|
| AWS MAP funding | -70-80% of partner costs | AWS covers migration consulting for qualifying projects |
| VMware, Oracle, or SAP workloads | Additional MAP funding tracks | AWS offers dedicated funding streams for these workloads, with larger budgets and higher coverage than standard MAP |
| Already containerised workloads | -30-50% | Skip containerisation phase, faster migration |
| Simple rehost (lift-and-shift) | -40-60% vs replatform | No application changes needed, mostly automated |
| Single cloud target (no hybrid) | -15-20% | No split-brain networking or cross-environment connectivity |
Ongoing AWS infrastructure costs (monthly)
After migration, your monthly AWS bill replaces your previous hosting costs. Here’s what to expect based on real environments:
Small application (startup, single product)
Typical profile: 1 web app, 1 API, 1 database, low-moderate traffic (under 100K requests/day)
| Component | Service | Monthly cost |
|---|---|---|
| Compute | ECS Fargate (2 tasks, 0.5 vCPU, 1 GB each) | $30-60 |
| Database | RDS PostgreSQL db.t4g.medium (Multi-AZ) | $110-140 |
| Load balancer | ALB | $20-30 |
| Storage | S3 (50 GB) + EBS | $5-15 |
| Data transfer | ~50 GB egress | $5-10 |
| Monitoring | CloudWatch basic | $10-20 |
| Networking | NAT Gateway (if needed) | $35-50 |
| Total | $215-325/month |
Compare this to Heroku: 2 Standard-2X dynos + Heroku Postgres Standard-0 = ~$300-400/month for equivalent capability.
Mid-size platform (growing SaaS, 5-15 services)
Typical profile: microservices architecture, multi-AZ, CI/CD, monitoring stack, moderate traffic
| Component | Service | Monthly cost |
|---|---|---|
| Compute | ECS Fargate (8-15 tasks across services) | $200-600 |
| Database | RDS PostgreSQL db.m6g.large Multi-AZ | $250-350 |
| Cache | ElastiCache Redis (r6g.large, Multi-AZ) | $200-300 |
| Load balancer | ALB + internal ALBs | $50-80 |
| Storage | S3 (500 GB) + EBS | $30-60 |
| Data transfer | ~200 GB egress + cross-AZ | $30-80 |
| Monitoring | CloudWatch + some custom metrics | $50-100 |
| Networking | NAT Gateway (multi-AZ) | $70-100 |
| Governance | AWS Control Tower + Organizations + SSO | $0 (no additional charge) |
| CI/CD | CodePipeline or GitHub Actions (self-hosted runners on EC2) | $30-80 |
| Security | WAF, GuardDuty, Security Hub | $30-60 |
| Total | $940-1,810/month |
Enterprise (regulated, multi-service, high availability)
Typical profile: 20+ services, multi-AZ, encryption everywhere, compliance monitoring, high traffic
| Component | Service | Monthly cost |
|---|---|---|
| Compute | ECS Fargate / EKS (30+ tasks/pods) | $1,500-5,000 |
| Databases | Multiple RDS instances Multi-AZ + read replicas | $1,000-3,000 |
| Cache & queues | ElastiCache (Multi-AZ) + SQS/SNS | $400-1,000 |
| Load balancing | Multiple ALBs + NLBs | $150-300 |
| Storage | S3 (multi-TB) + EBS + EFS | $200-1,000 |
| Data transfer | 1-5 TB egress + cross-AZ + VPN | $200-1,500 |
| Monitoring | CloudWatch + OpenSearch (logs) + Grafana | $200-600 |
| Networking | Transit Gateway + NAT Gateways + VPN | $200-500 |
| Governance | AWS Control Tower + Organizations + SCPs + SSO | $0 (no additional charge) |
| Security | WAF, GuardDuty, Security Hub, Config, KMS | $100-300 |
| Backup & DR | Cross-region replication, automated backups | $100-400 |
| Total | $4,050-13,600/month |
Hidden costs that catch teams after migration
These are the costs nobody warns you about in the vendor pitch deck:
1. Data transfer (egress)
AWS charges $0.09/GB for data leaving AWS to the internet. Teams that didn’t model egress during planning see bills 2-3x higher than expected. This is especially painful when:
- Your application serves large files (images, videos, documents)
- APIs respond to many external clients
- You have integrations with systems still on-premise
Mitigation: Use CloudFront for cacheable content (reduces egress costs by 40-60%), VPC endpoints for AWS service traffic, and PrivateLink for VPC-to-VPC.
2. Cross-AZ data transfer
$0.01/GB in each direction between availability zones. Sounds tiny, but a chatty microservices architecture doing 100M cross-AZ requests/month at 5KB average = ~$10/day = $300/month just in inter-service data transfer.
Mitigation: Co-locate tightly-coupled services in the same AZ where possible. Use AZ-affinity for service mesh routing.
3. NAT Gateway processing charges
$0.045/hour (~$33/month) + $0.045/GB of processed data. Every outbound internet request from private subnets goes through NAT. At 500 GB/month processed data = $22 in data charges on top of the hourly fee.
Mitigation: Use VPC endpoints for S3, DynamoDB, and other AWS services (eliminates NAT for that traffic). Consider NAT instances for dev/staging environments.
4. CloudWatch Logs ingestion
$0.50/GB ingested. Verbose application logging at 1 GB/day = $15/month. Multiply by 10 services = $150/month just for log storage. And that’s before you add log retention.
Mitigation: Set appropriate log levels per environment (ERROR in prod, DEBUG only in dev). Use log sampling for high-volume endpoints. Set retention policies (30 days for most logs).
5. Idle non-production environments
Dev and staging environments running 24/7 when developers only use them during business hours = paying for 128 hours/week of idle time out of 168 total.
Mitigation: Schedule non-production environments to shut down outside business hours. This single change saves 60-65% on dev/staging costs. Use Lambda-based schedulers or AWS Instance Scheduler.
On-premise vs AWS: total cost of ownership comparison
The real question isn’t “how much does AWS cost?” but rather “how does AWS compare to what I’m paying now?”
On-premise TCO (often underestimated)
| Cost category | Typical range (per server) | Notes |
|---|---|---|
| Hardware (amortised over 3-5 years) | $200-500/month | Servers, storage arrays, networking gear |
| Data centre space | $100-300/month | Colocation fees, or rent + power + cooling |
| Power and cooling | $50-150/month | Often 30-40% of total data centre cost |
| Networking (bandwidth, transit) | $100-500/month | Depends on traffic volume |
| Operations staff (allocated) | $300-800/month per server | Sysadmins, network engineers, on-call |
| Software licensing (OS, hypervisor, backup) | $50-200/month | VMware, Windows Server, backup tools |
| DR/backup infrastructure | $100-300/month | Offsite replication, tape, secondary site |
| Total per server | $900-2,750/month |
The break-even calculation
For a typical 5-server on-premise setup (2 app servers, 1 DB, 1 staging, 1 DR):
- On-premise TCO: $4,500-13,750/month
- Equivalent AWS (mid-size platform): $900-1,700/month
- Migration project cost: €46,000–€110,000 ($50,000-120,000) one-time
- Break-even point: 4-12 months after migration
After break-even, you’re saving $3,000-12,000/month on a permanent basis. Plus you get automatic scaling, managed security, and no hardware refresh cycles.
How to reduce migration costs with AWS funding
As an AWS Advanced Tier Partner, we help clients access migration funding that significantly reduces out-of-pocket costs:
AWS Migration Acceleration Program (MAP)
- What it covers: Up to 70-80% of partner engagement costs (assessment, migration execution, modernisation)
- Who qualifies: Companies migrating from on-premise or competing cloud providers with annual AWS spend commitment
- Typical benefit: A €92,000 ($100K) migration project → you pay €18,000–€28,000 ($20-30K) out of pocket
- Timeline: Funding approval takes 2-4 weeks; can be applied retroactively in some cases
AWS Proof of Concept (PoC) Programme
- What it covers: The prototyping/validation phase of migration, including architecture design, PoC build, and performance testing
- Who qualifies: Companies evaluating AWS for new workloads or migration
- Typical benefit: €4,500–€14,000 ($5,000-15,000) in funded PoC work
AWS Credits for Startups
- What it covers: AWS infrastructure credits (applied to your monthly bill)
- Who qualifies: Startups in accelerator programmes, VC-backed companies
- Typical benefit: $10,000-100,000 in AWS credits over 1-2 years (applied to infrastructure bill, billed in USD)
Cost reduction strategies post-migration
Once you’re on AWS, these are the levers for ongoing cost reduction:
| Strategy | Typical savings | Effort |
|---|---|---|
| Right-sizing (remove over-provisioned resources) | 20-35% | Low: review CloudWatch metrics |
| Savings Plans (1-year commit) | 30-40% on compute | Low: purchase based on baseline |
| Spot instances for non-critical workloads | 60-90% on those instances | Medium: needs fault tolerance |
| Environment scheduling (dev/staging off-hours) | 60-65% on non-prod | Low: Lambda scheduler |
| Storage tiering (S3 lifecycle policies) | 40-70% on storage | Low: policy configuration |
| Reserved Instances for databases | 30-45% on RDS | Low: 1-year commit |
For a detailed guide on Savings Plans vs Reserved Instances, see our AWS Savings Plans guide.
Cost comparison: Heroku vs AWS vs on-premise
Here are the most common migration paths we see, and how costs compare for a typical web application (API + database + worker + Redis):
| Cost element | Heroku | AWS (ECS Fargate) | On-premise |
|---|---|---|---|
| Compute (2 app instances) | $500/month (2× Standard-2X) | $60-120/month | $400-800/month (amortised) |
| Database (PostgreSQL, 64 GB) | $200/month (Standard-0) | $140-280/month (RDS) | $300-600/month (amortised + ops) |
| Redis cache | $30/month (Premium-1) | $50-100/month (ElastiCache) | $200-400/month (ops overhead) |
| Worker process | $250/month (Standard-2X) | $30-60/month (Fargate task) | Included in server cost |
| SSL/CDN | $0 (included) | $20-40/month (CloudFront + ACM) | $50-200/month (CDN vendor) |
| Monitoring | $0 (basic) / $26+ (add-ons) | $20-50/month (CloudWatch) | $200-500/month (Datadog/New Relic) |
| CI/CD | $0 (Heroku Pipelines) | $0-30/month (GitHub Actions) | $0-100/month (self-hosted) |
| Monthly total | $980-1,000+ | $320-680 | $1,150-2,600 |
| Annual | $11,760-12,000+ | $3,840-8,160 | $13,800-31,200 |
Note: Heroku costs escalate rapidly with scale. The prices above assume moderate traffic. At 10x traffic, Heroku costs can 3-5x while AWS costs increase 30-50% due to auto-scaling efficiency.
When migration is NOT worth the cost
Migration doesn’t always make financial sense. Don’t migrate if:
- Your application is end-of-life (retiring within 12 months). The ROI window is too short.
- You’re a 2-3 person team with no compliance requirements. PaaS simplicity has real value for small teams.
- Your current hosting costs are under $200/month. The migration investment won’t pay back.
- You have no traffic growth. If nothing is changing, there’s no trigger for the investment.
Migration makes sense when at least one of these is true:
- Monthly hosting exceeds $1,000 and growing
- Compliance deadlines are approaching (SOC 2, ISO 27001)
- You need multi-region, auto-scaling, or network isolation
- Your team needs full infrastructure control and ownership
Frequently asked questions
What is the average cost of AWS cloud migration?
Does AWS migration cost more than staying on-premise?
What are the hidden costs of AWS after migration?
How can I reduce AWS migration costs?
How long does AWS migration take?
Get a cost estimate for your migration
Every migration is different. The numbers above give you ranges, but a proper estimate requires understanding your specific environment: number of applications, database engines, traffic patterns, compliance requirements, and current costs.
Want a cost estimate for your migration?
Book a free 30-minute call. We'll map your current environment and give you a rough TCO comparison within a week.