AWSAmazon MWAAAnalytics

aws_mwaa_environment cost estimation

A managed Apache Airflow environment. Priced per environment-hour by size, plus additional worker and scheduler hours and metadata storage.

An aws_mwaa_environment runs Apache Airflow without you managing the scheduler, web server, or metadata database. It is priced on three things: the base environment, additional workers, and metadata storage. The base environment hour depends on the environment_class (mw1.small, mw1.medium, mw1.large), and it runs continuously, so even an idle environment bills 730 hours a month.

The base price includes one worker and one scheduler. Autoscaling workers beyond max_workers baseline, and extra schedulers, bill per additional unit-hour. For most teams the base environment dominates the bill: an mw1.small base is roughly $0.49/hour, about $358/month, before any extra workers.

c3x prices the base environment from environment_class. Additional worker hours and metadata storage are usage-based dimensions, since they depend on how much your DAGs actually scale; supply expected worker-hours in c3x-usage.yml for a fuller estimate. MWAA is one of those services where the floor cost surprises people, so seeing it before apply is the point.

Terraform example

A minimal but realistic configuration that C3X can estimate.

resource "aws_mwaa_environment" "data" {
  name              = "data-pipelines"
  environment_class = "mw1.small"

  airflow_version    = "2.10.1"
  dag_s3_path        = "dags/"
  execution_role_arn = aws_iam_role.mwaa.arn
  source_bucket_arn  = aws_s3_bucket.dags.arn

  max_workers = 10
  min_workers = 1

  network_configuration {
    security_group_ids = [aws_security_group.mwaa.id]
    subnet_ids         = aws_subnet.private[*].id
  }
}

Pricing dimensions

What you actually pay for when you provision aws_mwaa_environment.

DimensionUnitWhat's being charged
Environment hoursper hourBase rate for the environment_class, billed continuously. Includes one worker and one scheduler. c3x assumes 730 hours/month.
$0.49/hour for mw1.small
Additional worker hoursper worker-hourAutoscaling workers beyond the included baseline. Usage-based; depends on DAG concurrency. Define expected worker-hours in c3x-usage.yml.
$0.055/worker-hour for mw1.small
Additional scheduler hoursper scheduler-hourSchedulers beyond the one included. Most environments run a single scheduler.
Metadata database storageper GB-monthAirflow metadata DB storage. Usually small; usage-based.
$0.10/GB-month

Sample C3X output

Example output from c3x estimate (base environment only):

aws_mwaa_environment.data
└─ Environment (mw1.small)              730  hours      $357.70

OVERALL TOTAL                                          $357.70
(additional workers usage-based; add to c3x-usage.yml)

Optimization tips

Common ways to reduce aws_mwaa_environment cost without changing the workload.

Right-size environment_class to scheduler load, not worker load

Up to 50% of base

The class sets scheduler/web-server capacity. If your DAGs are light but numerous, mw1.small with more autoscaling workers is cheaper than jumping to mw1.medium.

Tune min_workers to zero-idle where possible

Worker-hours during idle

MWAA scales workers down to min_workers when idle. Keeping min_workers at 1 avoids cold scheduling cost while letting the environment scale up for bursts.

Consider self-managed Airflow on ECS for very large fleets

Workload-dependent

Above a few large environments, running Airflow yourself on ECS/EKS can be cheaper, trading the managed convenience for control. Estimate both with c3x before deciding.

FAQ

How does c3x estimate MWAA cost?

It reads environment_class and prices the base environment hour at 730 hours/month. Additional workers, extra schedulers, and metadata storage are usage-based and added only when you provide expected values in c3x-usage.yml.

Why does an idle MWAA environment still cost ~$358/month?

The base environment (scheduler + web server + one worker) runs continuously and bills per hour whether or not DAGs are executing. There is no scale-to-zero for the base environment.

How are autoscaling workers priced?

Workers above the included baseline bill per worker-hour at a class-specific rate. Because actual worker-hours depend on DAG concurrency, c3x treats them as usage-based; set expected worker-hours in the usage file.

Does the Airflow version affect cost?

No. Pricing is by environment_class and worker/scheduler hours, not the Airflow version.

Is the underlying VPC / NAT cost included?

No. MWAA runs in your VPC, so any aws_nat_gateway or VPC endpoints it uses are billed by those resources. c3x estimates them separately if they are in your Terraform.

Related resources

Estimate this resource in your own Terraform

Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including aws_mwaa_environment.