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.
| Dimension | Unit | What's being charged |
|---|---|---|
| Data nodes | per instance-hour | instance_count × the node rate, billed continuously. The bulk of the cost. $0.036/hour for t3.small.search → 1 node ≈ $26.28/month |
| EBS storage | per GB-month | Storage attached to each data node, billed per GB-month. |
| Dedicated master nodes | per instance-hour | Optional 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.28Optimization tips
Common ways to reduce aws_elasticsearch_domain cost without changing the workload.
Migrate to aws_opensearch_domain
Access to cheaper newer instancesThis 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 domainsHot 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 nodesSize 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 GravitonThe 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.