aws_kinesis_stream cost estimation
A real-time data stream. Two capacity modes: Provisioned (priced per shard-hour) or On-Demand (priced per record and per GB).
An aws_kinesis_stream is a managed stream for real-time data ingest and processing. Pricing depends on capacity mode, which is set by the stream_mode_details block.
Provisioned mode (the default) bills per shard-hour. Each shard handles 1 MB/s write and 2 MB/s read with up to 1,000 records/second. A stream with shard_count = 5 costs 5 × $0.015/hour × 730 = $54.75/month just for shard hours, regardless of actual throughput.
On-Demand mode bills per record and per GB ingested/retrieved: - $0.40 per million records written (PUT payload units, 25 KB each) - $0.04 per GB ingested - $0.04 per GB retrieved by consumers
On-Demand is right for variable workloads or when you don't want to manage shard count. Provisioned is cheaper for predictable steady-state load.
Additional cost components:
Extended retention (24h default, up to 365 days): each extra hour is $0.02/shard-hour. For 7-day retention on a 5-shard stream, that's an extra ~$130/month.
Enhanced fan-out consumers: $0.015/consumer-shard-hour plus $0.013/GB retrieved. Right when you have multiple consumers each needing dedicated throughput.
Data transfer between AZs: free for Kinesis-internal traffic but consumers pulling data pay standard egress.
c3x reads stream_mode_details and shard_count for provisioned mode. On-Demand requires expected throughput in c3x-usage.yml.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "aws_kinesis_stream" "events" {
name = "production-events"
shard_count = 5
retention_period = 48
stream_mode_details {
stream_mode = "PROVISIONED"
}
shard_level_metrics = [
"IncomingBytes",
"OutgoingBytes",
]
tags = {
Environment = "production"
}
}Pricing dimensions
What you actually pay for when you provision aws_kinesis_stream.
| Dimension | Unit | What's being charged |
|---|---|---|
| Provisioned shard hours | per shard-hour | Each shard handles 1 MB/s write and 2 MB/s read. Billed continuously regardless of utilization. $0.015/shard-hour ≈ $10.95/shard/month |
| PUT payload units (On-Demand) | per 1M payload units | Each 25 KB written counts as one payload unit. A 100 KB write is 4 payload units. $0.40/1M payload units |
| On-Demand data ingest | per GB | Bytes written to the stream. $0.04/GB |
| On-Demand data retrieval | per GB | Bytes read by consumers. Charged per consumer per GB retrieved. $0.04/GB |
| Extended retention | per shard-hour | Beyond 24-hour default. Configured via retention_period. $0.02/shard-hour extra |
| Enhanced fan-out | per consumer-shard-hour + per GB | Dedicated 2 MB/s read per consumer per shard. |
Optimization tips
Common ways to reduce aws_kinesis_stream cost without changing the workload.
Use On-Demand for unpredictable workloads
Workload-dependentProvisioned bills regardless of utilization. On-Demand bills only for actual data. For workloads with low average utilization or unpredictable spikes, On-Demand is cheaper despite per-record fees.
Right-size shard count in Provisioned mode
$11/month per removed shardEach shard is $11/month. Many streams are overprovisioned for 'safety'. Check CloudWatch IncomingBytes and WriteProvisionedThroughputExceeded to find the actual utilization.
Skip Enhanced Fan-Out unless needed
Workload-dependentEFO is per-consumer per-shard. For workloads with one or two consumers, regular GetRecords sharing the 2 MB/s read budget is cheaper. EFO is right for 3+ concurrent consumers.
Avoid extended retention you don't use
Up to ~75% on shard costDefault retention is 24 hours. Extending to 7 days more than doubles the shard cost. If consumers process within an hour, 24 hours is plenty.
Consider Kafka (MSK) for very high throughput
Extreme-volume workloadsAt extreme throughput (>10 TB/day sustained), MSK or self-managed Kafka can be cheaper than Kinesis. Crossover involves comparing shard count, MSK cluster size, and operational overhead.
FAQ
Provisioned or On-Demand mode?
Provisioned: predictable load, want lowest cost per GB at sustained throughput. On-Demand: variable load, prefer simplicity, accept ~30% premium per GB for not managing shards. Streams often start on-demand then move to provisioned once traffic stabilizes.
How does c3x estimate Kinesis cost?
For Provisioned: c3x multiplies shard_count by the per-shard rate plus extended retention if configured. For On-Demand: requires monthly_incoming_records, monthly_data_gb in c3x-usage.yml.
Are consumer applications counted?
Standard Lambda consumers via event source mapping: each Lambda invocation is billed as a separate Lambda cost. Enhanced fan-out consumers add per-shard-hour cost. KCL-based applications on EC2 add EC2 cost.
What about Kinesis Data Firehose?
Firehose is a separate resource (aws_kinesis_firehose_delivery_stream) priced per GB ingested with no shards to manage. Right for batch-style delivery to S3/Redshift/OpenSearch. c3x estimates Firehose independently.
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_kinesis_stream.