From $1,230 to $265/month: migrating from AWS to OCI with zero downtime
Published on March 17, 2026

The starting point
In March 2026, a high-volume e-commerce portal was running entirely on AWS in us-east-1. The stack was functional: ECS Fargate for frontend containers, ARM EC2 for WordPress, RDS MariaDB for the database, ALB as load balancer, and AWS WAF for protection.
The problem wasn't technical. It was financial. The AWS bill closed at $1,230/month — and most of that was concentrated in two line items that, in OCI, cost a fraction or are free.
$271/month on WAF + Logs alone. $490/month on ECS Fargate. Two items, $761 — 62% of the total bill.
Why OCI?
Oracle Cloud has an aggressive proposition for workloads combining ARM + containers + high-traffic WordPress. The free tier is generous (10 TB egress/month, basic WAF included, Logging at no extra cost), and the A1.Flex ARM VMs deliver hard-to-beat price-performance.
Another deciding factor: the sa-saopaulo-1 (GRU) region had comparable latency to us-east-1 for Brazilian traffic — without the latency penalty that some fear when leaving AWS.
Service mapping
Each AWS component was mapped to an OCI equivalent:
ECS Fargate (2–4 tasks, 4vCPU/8GB) → OKE Node Pool with VM.Standard.A1.Flex ARM
EC2 c6g.2xlarge ARM (8vCPU/16GB) → VM.Standard.A1.Flex (8 OCPU/16GB ARM)
RDS MariaDB db.t3.large → MySQL Database Service (MDS)
Application Load Balancer (ALB) → Flexible Load Balancer
AWS WAF + CloudWatch Logs → OCI WAF (included in LB) + OCI Logging (10 GB/month free)
ECR (registry) → OCIR (gru.ocir.io)
Data Transfer (egress) → 10 TB/month free on OCI
Cost comparison — before and after
Month-by-month comparison after migration:
ECS Fargate → OKE A1.Flex ARM: $490 → $60 (-88%)
EC2 ARM → OCI VM A1.Flex: $195 → $60 (-69%)
RDS MariaDB → MySQL MDS: $120 → $75 (-38%)
ALB → Flexible LB: $40 → $20 (-50%)
NAT Gateway: $50 → $35 (-30%)
WAF + Logs: $271 → $0 (OCI free tier)
Egress/Data Transfer: $30 → $0 (10 TB free)
Registry + Storage + DNS + Cert: $34 → $15 (-56%)
Total: $1,230/month → $265/month. Savings: $965/month, $11,580/year.
The two biggest wins
1. Free WAF in the basic tier
On AWS, WAF charged $100 base fee + $0.60 per million requests + CloudWatch Logs. At high traffic, this easily exceeded $270/month. In OCI, the WAF integrated into the Flexible Load Balancer has no additional cost at the basic tier — and still supports the most common OWASP rules.
Important: the free OCI WAF has limitations. For advanced custom rules and granular rate limiting, the paid version is required. But for most WordPress workloads, the basics are enough.
2. ARM is genuinely worth it
The largest item on the AWS bill was ECS Fargate with x86 instances. On OCI, we migrated to A1.Flex ARM VMs and the cost dropped from $490 to $60/month. The application (Next.js + WordPress containers) ran without any code changes — Docker images were recompiled for linux/arm64 using multi-arch builds in GitHub Actions.
Performance was equivalent. On some endpoints, latency improved slightly — which we attribute to the combination of lower OCI LB overhead and local Valkey cache.
How we did it with zero downtime
The migration followed a gradual cutover strategy, not a big bang. The process took approximately two weeks:
Week 1: Provisioned VCN, OKE, MySQL MDS, and WordPress VM on OCI. Data synced via binlog replication from RDS → MDS. CI/CD pipeline pointing to OCIR in parallel.
Week 2: Load testing on OCI environment with mirrored traffic. WAF, LB, and SSL validation. DNS cutover with TTL reduced to 60 seconds. Intensive monitoring for 48 hours.
The AWS environment stayed up for 7 more days as fallback, but wasn't needed. The cutover happened during a low-traffic window (Sunday night) and no incidents were recorded.
What we learned
Key points for anyone planning this migration:
Rebuild images for ARM. Running x86 images via emulation on OCI A1.Flex works, but with performance degradation. Multi-arch build is worth the effort.
MySQL MDS is stricter than RDS. Some procedures and permissions that work on RDS need adjustment in MDS. Test your application thoroughly before cutover.
The free egress has limits. 10 TB/month is generous, but verify your actual consumption. Beyond that, OCI charges per GB.
OCI IAM is different from AWS IAM. The learning curve is real. Reserve time to understand Compartments, Policies, and Dynamic Groups before starting.
Is it worth it for your case?
This migration makes particular sense if you have: workloads with high WAF + Logs costs on AWS, containers that can run on ARM, and significant egress traffic. It's not for everyone — if you use proprietary AWS services (DynamoDB, SQS, Lambda with deep integrations), refactoring costs may outweigh the savings.
For simpler stacks — containers + relational database + WordPress — OCI delivers a price-performance ratio that's hard to ignore.
78% reduction. $11,580 saved per year. The infrastructure keeps running — and now it's holding up with a much larger cost margin.
