AWSAmazon OpenSearch ServiceAnalytics

aws_elasticsearch_domain cost estimation

The legacy Elasticsearch Service domain (now OpenSearch). Bills per data-node instance-hour plus storage. A single t3.small.search node is ~$26/month.

An aws_elasticsearch_domain is the older Terraform resource for Amazon Elasticsearch Service, which AWS renamed to Amazon OpenSearch Service. The pricing is identical to OpenSearch: data nodes bill per instance-hour, plus EBS storage, plus optional dedicated master nodes — all running continuously.

A single t3.small.search data node is ~$0.036/hour, about $26/month, fine for dev or tiny workloads. Production domains run multiple larger data nodes (and usually three dedicated masters), so the real cost is the sum of those instance-hours, which can reach hundreds or thousands per month.

If you're on this legacy resource, the most useful move is migrating to aws_opensearch_domain — same cost mechanics, but the current resource with access to newer instance types and features. Either way, the optimization levers are identical: right-size data nodes, tier old indices to UltraWarm, use Graviton nodes, and reserve the steady baseline.

c3x prices the domain from cluster_config.instance_type and instance_count, so the always-on cluster cost is visible before deployment.

Terraform example

A minimal but realistic configuration that C3X can estimate.

resource "aws_elasticsearch_domain" "logs" {
  domain_name           = "logs"
  elasticsearch_version = "7.10"

  cluster_config {
    instance_type  = "t3.small.elasticsearch"
    instance_count = 1
  }

  ebs_options {
    ebs_enabled = true
    volume_size = 20
  }
}

Pricing dimensions

What you actually pay for when you provision aws_elasticsearch_domain.

DimensionUnitWhat's being charged
Data nodesper instance-hourinstance_count × the node rate, billed continuously. The bulk of the cost.
$0.036/hour for t3.small.search → 1 node ≈ $26.28/month
EBS storageper GB-monthStorage attached to each data node, billed per GB-month.
Dedicated master nodesper instance-hourOptional but recommended for production — typically three small nodes running 24/7.

Sample C3X output

A single t3.small data node (dev-scale):

aws_elasticsearch_domain.logs
└─ Data nodes (t3.small × 1)   730 instance-hours   $26.28
                               Monthly              $26.28

Optimization tips

Common ways to reduce aws_elasticsearch_domain cost without changing the workload.

Migrate to aws_opensearch_domain

Access to cheaper newer instances

This kind is the legacy Elasticsearch Service resource. Migrating to OpenSearch unlocks newer instance types (including Graviton) and features at the same or lower cost — the first step before other optimizations.

Tier old indices to UltraWarm

Large on retention-heavy domains

Hot data-node storage is expensive; most queries touch recent data. Move older indices to UltraWarm (S3-backed) to cut storage cost substantially on log-analytics domains.

Right-size and reserve

30–50% on steady nodes

Size data nodes to sustained load, then buy reserved instances on the steady baseline for 30-50% off. The same logic as any always-on cluster.

Use Graviton nodes (after migrating to OpenSearch)

~20% on Graviton

The r6g/m6g (Graviton) search instances are ~20% cheaper than equivalent x86 nodes — available on OpenSearch, another reason to migrate off the legacy resource.

FAQ

Is aws_elasticsearch_domain different from OpenSearch?

It's the legacy Terraform resource for what's now Amazon OpenSearch Service. Pricing and mechanics are identical to aws_opensearch_domain; the resource name is just the old one. New deployments should use aws_opensearch_domain.

Why is my Elasticsearch domain expensive?

Data nodes run 24/7 and clusters are usually sized for peak indexing and retention, plus dedicated masters. The bill is the sum of those continuous instance-hours plus EBS — tiering old data to UltraWarm and right-sizing nodes are the main fixes.

How does c3x estimate the cost?

From cluster_config.instance_type and instance_count, pricing the data-node hours (the OpenSearch instance rates apply). EBS and master nodes add to it.

Should I migrate off this resource?

Yes — to aws_opensearch_domain. Same cost model, but the current resource with newer (often cheaper) instance types and ongoing feature support.

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_elasticsearch_domain.