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_
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_
c3x prices the domain from cluster_
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_.
| Dimension | Unit | What's being charged |
|---|---|---|
| Data nodes | per instance-hour | instance_ $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_ 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 to 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_
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_
Should I migrate off this resource?
Yes, to aws_
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_.