DEV Community

Nahuel Nucera
Nahuel Nucera

Posted on

MiniStack now emulates MWAA. Develop and test Airflow DAGs locally, skip the $353/month

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:

Services

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

Cost per run

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

Savings with Ministack

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

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"
Enter fullscreen mode Exit fullscreen mode
docker compose up -d
Enter fullscreen mode Exit fullscreen mode

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",
)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode
# Real AWS
pytest tests/

# MiniStack
ENDPOINT_URL=http://localhost:4566 pytest tests/
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)