MWAA costs $353/month. That's $0.49/hour, 24/7, just for the environment to exist. Whether you're actively developing DAGs, running tests in CI, or doing nothing at all; you pay.
MiniStack now emulates MWAA. You can develop and validate Airflow DAGs locally. DAG structure, task routing, API calls on a single Docker container. No AWS environment needed until you deploy to production.
If you had a dedicated MWAA environment for development and testing, that's $353/month you no longer need.
And MWAA is just one piece. Here's what a full integration test suite actually costs on AWS.
The scenario
A typical integration test suite that validates cloud infrastructure:
| Test Type | What It Validates | AWS Services Used |
|---|---|---|
| Table schema checks | Partition keys, GSIs, TTL, billing, PITR | DynamoDB |
| Parameter verification | Config values, paths, naming | SSM Parameter Store |
| Object storage ops | Upload, list, download, cleanup | S3 |
| ETL job execution | Data transformation pipeline | Glue |
| Query validation | Output correctness | Athena |
| Workflow orchestration | DAG structure, task routing | MWAA (Airflow) |
| Serverless functions | Event processing, API handlers | Lambda |
| Message queues | Pub/sub, FIFO ordering | SQS |
Per test run: ~50 DynamoDB operations, ~10 S3 operations, 9 Glue jobs (10 workers, ~4 min each), 20 Athena queries, 4 MWAA API calls.
Cost per test run by region
| Component | Cost | Dominance |
|---|---|---|
| Glue (9 jobs x 10 workers x 4 min) | $2.64 | 99.9% |
| DynamoDB (50 reads + 25 writes) | $0.0001 | ~0% |
| S3 (~25 requests, 1MB data) | $0.0001 | ~0% |
| Athena (20 queries x 10MB min) | $0.001 | ~0% |
| SSM (3 GetParameter calls) | Free | 0% |
| MWAA (API calls only, env already running) | $0.00 | 0% |
Per-run cost is identical across all regions: ~$2.64 (Glue pricing is uniform)
The only regional variation is in DynamoDB and S3, which together account for less than $0.001 per run — negligible.
AWS pricing by region
Services with uniform global pricing
| Service | Unit | Price |
|---|---|---|
| Glue ETL | DPU-hour (G.1X) | $0.44 |
| Athena | Per TB scanned (10MB min) | $5.00 |
| MWAA mw1.small | Per hour | $0.49 |
| MWAA mw1.medium | Per hour | $0.74 |
| Lambda | Per 1M requests | $0.20 |
| Lambda | Per GB-second | $0.0000166667 |
| SQS Standard | Per 1M requests | $0.40 |
| SSM Standard | API calls + storage | Free |
DynamoDB on-demand (per 1M request units)
| Region | Writes (WRU) | Reads (RRU) | vs US baseline |
|---|---|---|---|
| us-east-1 (N. Virginia) | $0.625 | $0.125 | baseline |
| us-west-2 (Oregon) | $0.625 | $0.125 | same |
| eu-west-1 (Ireland) | $0.705 | $0.142 | +13% |
| eu-central-1 (Frankfurt) | $0.763 | $0.153 | +22% |
| ap-southeast-1 (Singapore) | $0.710 | $0.143 | +14% |
| ap-northeast-1 (Tokyo) | $0.715 | $0.143 | +14% |
S3 Standard
| Region | Storage $/GB/mo | PUT per 1K | GET per 1K |
|---|---|---|---|
| us-east-1 | $0.023 | $0.005 | $0.0004 |
| us-west-2 | $0.023 | $0.005 | $0.0004 |
| eu-west-1 | $0.023 | $0.005 | $0.0004 |
| eu-central-1 | $0.0245 | $0.0054 | $0.00043 |
| ap-southeast-1 | $0.025 | $0.005 | $0.0004 |
| ap-northeast-1 | $0.025 | $0.0047 | $0.00037 |
Monthly cost: AWS vs MiniStack
AWS monthly cost by test frequency
| Frequency | Runs/month | Test Cost | MWAA env (24/7) | Total |
|---|---|---|---|---|
| 2x/week | 9 | $24 | $353 | $377 |
| 1x/day | 30 | $79 | $353 | $432 |
| 3x/day | 90 | $238 | $353 | $591 |
| 5x/day | 150 | $396 | $353 | $749 |
| 10x/day | 300 | $792 | $353 | $1,145 |
Note: MWAA is typically shared infrastructure (dev + test + orchestration), not test-only. Attributing 20% to testing: ~$71/month.
| Frequency | Test Cost | + MWAA (20%) | Monthly Total |
|---|---|---|---|
| 2x/week | $24 | $71 | $95 |
| 1x/day | $79 | $71 | $150 |
| 3x/day | $238 | $71 | $309 |
| 5x/day | $396 | $71 | $467 |
| 10x/day | $792 | $71 | $863 |
MiniStack monthly cost
MiniStack runs on a CI runner. No AWS charges.
| Component | Cost |
|---|---|
| Docker container startup | ~2 seconds |
| Test execution (41 infra tests) | ~1 second |
| CI runner time (~2 min total) | $0.016 per run |
| Frequency | Runs/month | MiniStack Cost |
|---|---|---|
| 2x/week | 9 | $0.14 |
| 1x/day | 30 | $0.48 |
| 3x/day | 90 | $1.44 |
| 5x/day | 150 | $2.40 |
| 10x/day | 300 | $4.80 |
Based on standard CI runner at $0.008/minute, 2 minutes per run.
Savings summary
Monthly savings (AWS → MiniStack)
| Frequency | AWS/month | MiniStack/month | Saving | % |
|---|---|---|---|---|
| 2x/week | $95 | $0.14 | $95 | 99.9% |
| 1x/day | $150 | $0.48 | $150 | 99.7% |
| 3x/day | $309 | $1.44 | $308 | 99.5% |
| 5x/day | $467 | $2.40 | $465 | 99.5% |
| 10x/day | $863 | $4.80 | $858 | 99.4% |
Annual savings
| Frequency | AWS/year | MiniStack/year | Annual Saving |
|---|---|---|---|
| 2x/week | $1,140 | $2 | $1,138 |
| 1x/day | $1,800 | $6 | $1,794 |
| 3x/day | $3,708 | $17 | $3,691 |
| 5x/day | $5,604 | $29 | $5,575 |
| 10x/day | $10,356 | $58 | $10,298 |
Volume / performance testing (occasional)
These run against real AWS (not practical on a local emulator due to cluster scale):
| Test | Rows | Glue Duration | Glue Cost | S3 | Athena | Total |
|---|---|---|---|---|---|---|
| 5M rows | 5,100,000 | ~30 min | $2.20 | $0.001 | $0.02 | $2.22 |
| 15M rows | 15,000,000 | ~60 min | $4.40 | $0.003 | $0.05 | $4.45 |
| 30M rows | 30,000,000 | ~120 min | $8.80 | $0.007 | $0.11 | $8.92 |
Running all three once per month: ~$16/month additional.
What runs where
| Test Category | MiniStack | Real AWS | Cost Driver |
|---|---|---|---|
| DynamoDB schema + CRUD | Yes | Optional | DynamoDB: free-tier negligible |
| SSM parameter checks | Yes | Optional | SSM: free |
| S3 upload/download | Yes | Optional | S3: pennies |
| Glue ETL pipeline | No* | Yes | Glue: $2.64/run |
| Athena query validation | No* | Yes | Athena: pennies |
| MWAA DAG validation | Yes | Optional | MWAA: $353/mo fixed |
| Lambda function tests | Yes | Optional | Lambda: free tier covers it |
| SQS message flow | Yes | Optional | SQS: free tier covers it |
| Volume/perf tests | No | Yes | Glue at scale |
MiniStack supports Glue catalog operations and Athena (via DuckDB), but running full PySpark ETL jobs locally requires additional setup (local Spark + Iceberg).
Quick start
1. Start MiniStack
# docker-compose.yml
services:
ministack:
image: ministackorg/ministack:latest
ports:
- "4566:4566"
docker compose up -d
2. Provision infrastructure
import boto3
endpoint = "http://localhost:4566"
ddb = boto3.client("dynamodb", endpoint_url=endpoint,
aws_access_key_id="test", aws_secret_access_key="test", region_name="us-east-1")
ddb.create_table(
TableName="my-table",
KeySchema=[{"AttributeName": "pk", "KeyType": "HASH"}],
AttributeDefinitions=[{"AttributeName": "pk", "AttributeType": "S"}],
BillingMode="PAY_PER_REQUEST",
)
3. Point tests at MiniStack
# One config change — everything else stays the same
endpoint_url = os.environ.get("ENDPOINT_URL") # None for real AWS
def make_client(service):
kwargs = {}
if endpoint_url:
kwargs["endpoint_url"] = endpoint_url
kwargs["aws_access_key_id"] = "test"
kwargs["aws_secret_access_key"] = "test"
return boto3.client(service, region_name="us-east-1", **kwargs)
# Real AWS
pytest tests/
# MiniStack
ENDPOINT_URL=http://localhost:4566 pytest tests/
4. Run in CI
# GitHub Actions example
jobs:
integration-tests:
runs-on: ubuntu-latest
services:
ministack:
image: ministackorg/ministack:latest
ports:
- 4566:4566
steps:
- uses: actions/checkout@v4
- run: pip install boto3 pytest
- run: python scripts/provision.py # Create tables, params, buckets
- run: ENDPOINT_URL=http://localhost:4566 pytest tests/ -v
No AWS credentials. No IAM roles. No VPN. Every push, every PR.
Free tier reminder
If running against real AWS at low frequency, free tier covers most services:
| Service | Free Tier | Covers test suite? |
|---|---|---|
| DynamoDB | 25 GB + 25 RRU/WRU provisioned (always free) | On-demand mode: not covered, but cost is < $0.01/run |
| S3 | 5 GB + 20K GET + 2K PUT (12 months) | Yes |
| Lambda | 1M requests + 400K GB-s (always free) | Yes |
| SQS | 1M requests (always free) | Yes |
| SSM Standard | 10K parameters + API calls (always free) | Yes |
| Glue | No free tier | Not covered — this is the cost |
| Athena | No free tier (but $0.001/run) | Negligible |
| MWAA | No free tier | $353/month minimum |
Bottom line: Glue and MWAA are the only services that cost real money for testing. MiniStack eliminates the need for both in CI.
Services supported by MiniStack
55+ AWS services including: S3, DynamoDB, Lambda, SQS, SNS, SSM, Glue, Athena, MWAA, Step Functions, ECS, RDS, ElastiCache, Kinesis, EventBridge, Cognito, KMS, IAM, STS, Secrets Manager, CloudWatch, CloudFormation, API Gateway, Route53, EKS, ECR, and more.
Full list: github.com/ministackorg/ministack
Some tools paywall their services. MiniStack is MIT licensed. Free forever.
GitHub · Docker Hub · ministack.org · LinkedIn
All pricing verified against AWS published rates for 2025/2026. MiniStack is MIT-licensed open-source software. CI runner costs based on GitHub Actions standard runners at $0.008/minute.




Top comments (0)