With on-demand capacity mode, you pay per request for the data reads and writes your application performs on your tables. You do not need to specify how much read and write throughput you expect your application to perform, as DynamoDB instantly accommodates your workloads as they ramp up or down. This page details how DynamoDB charges for the core and optional features of DynamoDB. For pricing in AWS China Regions, see the AWS China Regions pricing page.
Key terms
Read request unit: API calls to read data from your table are billed in read request units. DynamoDB read requests can be either strongly consistent, eventually consistent, or transactional. A strongly consistent read request of up to 4 KB requires one read request unit. For items larger than 4 KB, additional read request units are required. For items up to 4 KB in size, an eventually consistent read request requires one-half read request unit, and a transactional read request requires two read request units. For example, a strongly consistent read request of an 8 KB item requires two read request units, an eventually consistent read of an 8 KB item requires one read request unit, and a transactional read of an 8 KB item requires four read request units. See Read Consistency for more details.
Write request unit: API calls to write data to your table are billed in write request units. A standard write request unit can write an item up to 1 KB. For items larger than 1 KB, additional write request units are required. A transactional write requires two write request units. For example, a write request of a 1 KB item requires one write request unit, a write request of a 3 KB item requires three write request units, and a transactional write request of a 3 KB item requires six write request units.
Replicated write request unit: When using DynamoDB global tables, your data is written automatically to multiple AWS Regions of your choice. Each write occurs in the local Region as well as the replicated Regions.
Streams read request unit: Each GetRecords API call to DynamoDB Streams is a streams read request unit. Each streams read request unit can return up to 1 MB of data.
Transactional read/write requests: In DynamoDB, a transactional read or write differs from a standard read or write because it guarantees all operations contained in a single transaction set succeed or fail as a set.
Change data capture units: DynamoDB can capture item-level changes in your DynamoDB tables and replicate them to other AWS services such as Amazon Kinesis Data Streams and AWS Glue. DynamoDB captures these changes as delegated operations, which means DynamoDB performs the replication on your behalf so that you don’t have to manage throughput capacity. DynamoDB charges one change data capture unit for each write to your table (up to 1 KB). For items larger than 1 KB, additional change data capture units are required.
DynamoDB table classes: DynamoDB offers two table classes designed to help you optimize for cost. The DynamoDB Standard table class is the default and recommended for the vast majority of workloads. The DynamoDB Standard-Infrequent Access (DynamoDB Standard-IA) table class is optimized for tables that store data that is accessed infrequently, where storage is the dominant cost. Each table class offers different pricing for data storage as well as read and write requests. You can select the most cost-effective table class based on your table’s storage requirements and data access patterns. Learn more about DynamoDB table classes in the DynamoDB Developer Guide.
DynamoDB features and billing overview
Feature |
What it does |
Billing unit |
|
Core features |
|||
|
Write request |
Writes data to your table |
Write request unit |
|
Read request |
Reads data from your table |
Read request unit |
Optional features |
|||
|
Continuous backup |
Takes continuous backups for the preceding 35 days |
GB-month |
|
On-demand backup |
Takes snapshot backups at specified points in time |
GB-month |
|
Restore from backup |
Restores a table to a specific snapshot or time |
GB |
|
Global tables |
Replicates data to create a multi-Region, multi-active table |
Replicated write request unit |
Change data capture for Amazon Kinesis Data Streams | Captures item-level data changes on a table and replicates them to Kinesis Data Streams | Change data capture unit | |
Change data capture for AWS Glue | Captures item-level data changes on a table and replicates them to AWS Glue | Change data capture unit | |
Data export to Amazon S3 | Exports DynamoDB table backups from a specific point in time to Amazon S3 | GB | |
Data import from Amazon S3 | Migrate and load data from Amazon S3 to new DynamoDB tables | GB | |
|
DynamoDB Streams |
Provides a time-ordered sequence of item-level changes on a table |
Streams read request unit |
|
Data transfer out |
Transfers data to other AWS Regions |
GB |
Integrations with DynamoDB billing overview
Integration |
What it does |
Billing unit |
|
|
Integration with DynamoDB Accelerator (DAX), a DynamoDB-compatible caching service |
Improves price performance and reduces latency from milliseconds to microseconds |
Node-hour |
Zero-ETL integration with Amazon OpenSearch Service | Enables full-text search, vector search, semantic search, geospatial search, and more without building and managing data pipelines | GB of exports | |
Zero-ETL integration with Amazon Redshift | Enables analytics on operational data without building and managing data pipelines | GB of exports |
DynamoDB pricing
-
• Read and write requests
When you select on-demand capacity mode for your DynamoDB table, you pay only for the reads and writes your application performs. You can make API calls as needed without managing throughput capacity on the table. DynamoDB handles the management of hardware resources to accommodate your workload with consistent, low-latency performance. DynamoDB charges one write request unit for each write (up to 1 KB) and two write request units for transactional writes. For reads, DynamoDB charges one read request unit for each strongly consistent read (up to 4 KB), two read request units for each transactional read, and one-half read request unit for each eventually consistent read. The prices for read and write requests depend on your table class.
-
• Data storage
You do not need to provision storage: DynamoDB monitors the size of your tables continuously to determine your storage charges. DynamoDB measures the size of your billable data by adding the raw byte size of your data plus a per-item storage overhead that depends on the features you have enabled. See the DynamoDB Developer Guide to learn more. The price for data storage depends on your table class.
-
• Backup and restore
DynamoDB offers two methods to back up your table data. Continuous backups with point-in-time recovery (PITR) provide an ongoing backup of your table for the preceding 35 days. You can restore your table to the state of any specified second in the preceding five weeks. On-demand backups create snapshots of your table to archive for extended periods to help you meet corporate and governmental regulatory requirements.
Continuous backups (PITR)
DynamoDB charges for PITR based on the size of each DynamoDB table (table data and local secondary indexes) on which it is enabled. DynamoDB monitors the size of your PITR-enabled tables continuously throughout the month to determine your backup charges and continues to bill you until you disable PITR on each table.
On-demand backup
DynamoDB charges for on-demand backups based on the storage size of the table (table data and local secondary indexes). The size of each backup is determined at the time of each backup request. The total backup storage size billed each month is the sum of all backups of DynamoDB tables. DynamoDB monitors the size of on-demand backups continuously throughout the month to determine your backup charges.
You can use DynamoDB or AWS Backup to create and manage on-demand backups. To learn more, see Using On-Demand Backup and Restore. With AWS Backup you can centralize and automate data protection across AWS services. AWS Backup also offers advanced features such cross-account and cross-Region on-demand backup copying, low-cost storage tier, backup tagging, and backup encryption that is independent from its source data to help meet your business continuity requirements and optimize backup costs. Additional charges apply for cross-Region data transfer. For more information about these charges, see AWS Backup pricing.
* Cold backup storage is supported for on-demand backups that are managed by AWS Backup only. You can opt-in to use AWS Backup from the AWS Management Console.
Backups that are transitioned to Cold Storage have a minimum 90 days of storage, and backups deleted before 90 days incur a pro-rated charge equal to the storage charge for the remaining days.Restoring a table
Restoring a table from on-demand backups or PITR is charged based on the total size of data restored (table data, local secondary indexes, and global secondary indexes) for each request.
* Restoring from cold backup storage is supported for on-demand backups that are managed by AWS Backup only. You can opt-in to use AWS Backup from the AWS Management Console. Cold backup storage is not applicable for continuous backups with point-in-time recovery (PITR).
-
• Global tables
When you select on-demand capacity mode for your DynamoDB global tables, you pay only for the resources your application uses on each replica table. Write requests for global tables are measured in replicated write request units instead of standard write request units. The number of write request units consumed for replication depends on the version of global tables you are using. For more information, see Best Practices and Requirements for Managing Global Tables. Read requests and data storage are billed consistently with tables that are not global tables. The pricing depends on your table class. If you add a table replica to create or extend a global table in new Regions, DynamoDB charges for a table restore in the added Regions per gigabytes of data restored. Cross-Region replication and adding replicas to tables that contain data also incur charges for data transfer out. See the "Data transfer" section on this pricing page for details.
-
• Change data capture for Amazon Kinesis Data Streams
DynamoDB charges for change data capture for Amazon Kinesis Data Streams in change data capture units. DynamoDB charges one change data capture unit for each write (up to 1 KB). You pay only for the writes your application performs without having to manage throughput capacity on the table.
Kinesis Data Streams charges still apply when you replicate DynamoDB changes to a Kinesis data stream. For more information, see Amazon Kinesis Data Streams pricing. -
• Change data capture for AWS Glue
DynamoDB charges for change data capture for AWS Glue in change data capture units. DynamoDB charges one change data capture unit for each write (up to 1 KB). You pay only for the writes your application performs without having to manage throughput capacity on your table.
AWS Glue charges still apply when you replicate DynamoDB changes to an AWS Glue target database. For more information, see AWS Glue pricing.
-
• Data export to Amazon S3
Use this feature to export data from your DynamoDB continuous backups (point-in-time recovery) to Amazon Simple Storage Service (Amazon S3). The supported output data formats are DynamoDB JSON and Amazon Ion. You can analyze the exported data by using AWS services such as Amazon Athena, Amazon SageMaker, and AWS Lake Formation.
You can choose between a full export and an incremental export. Full exports are charged based on the size of each DynamoDB table (table data and local secondary indexes) at the specified point in time when the backup was created. Incremental exports are charged based on the size of data processed from continuous backups to generate the incremental export output. Additional charges apply for storing exported data in Amazon S3 and for PUT requests made against your Amazon S3 bucket. For more information about these charges, see Amazon S3 pricing.
-
• Data import from Amazon S3
Amazon DynamoDB data import provides a simple and efficient way to move data between Amazon S3 and DynamoDB tables without writing any code. You can copy tables between AWS regions and accounts to help migrate data and build new applications, facilitate data sharing and collaboration between teams, and help simplify disaster recovery and business continuity planning. Data import pricing is based on the uncompressed file size in Amazon S3. See Import from S3 for more details. The supported input data formats are CSV, DynamoDB JSON, and Amazon Ion.
Amazon S3 charges also apply for storing your source data and for GET requests made against your Amazon S3 bucket. For more information about Amazon S3 charges, see Amazon S3 pricing.
-
• Integration with DynamoDB Accelerator (DAX)
DAX is an Amazon DynamoDB-compatible caching service. DynamoDB charges for DAX capacity by the hour and your DAX instances run with no long-term commitments. Pricing is per node-hour consumed and is dependent on the instance type you select. Each partial node-hour consumed is billed as a full hour. Pricing applies to all individual nodes in the DAX cluster. For example, if you have a three-node DAX cluster, you are billed for each of the separate nodes (three nodes in total) on an hourly basis.
There is no charge for data transfer between Amazon Elastic Compute Cloud (Amazon EC2) and DAX within the same Availability Zone. Standard Amazon EC2 data transfer charges apply when transferring data between an Amazon EC2 instance and a DAX node in different Availability Zones of the same AWS Region. However, you are charged only for the data transfer into or out of the Amazon EC2 instance. There is no DAX data transfer charge for traffic into or out of the DAX node itself.
DAX T3 instances run in unlimited mode, which means that you will be charged if your average CPU utilization over a rolling 24-hour period exceeds the baseline of the instance. CPU credits are charged at $0.096 per vCPU-hour. The CPU credit pricing is the same for all T3 instance sizes across all AWS Regions.
-
• DynamoDB Streams
DynamoDB charges for reading data from DynamoDB Streams in read request units. Each GetRecords API call is billed as a streams read request unit and returns up to 1 MB of data from DynamoDB Streams. Streams read request units are unique from read requests on your DynamoDB table. You are not charged for GetRecords API calls invoked by AWS Lambda as part of DynamoDB triggers. You also are not charged for GetRecords API calls invoked by DynamoDB global tables.
-
• Data transfer
Data transfer in and out refers to transfer into and out of DynamoDB. DynamoDB does not charge for inbound data transfer, and it does not charge for data transferred between DynamoDB and other AWS services within the same AWS Region (in other words, $0.00 per GB). Data transferred across AWS Regions (such as between DynamoDB in the US East [N. Virginia] Region and Amazon EC2 in the EU [Ireland] Region) is charged on both sides of the transfer. As part of the AWS Free Tier, AWS customers receive 100 GB of free data transfer out to the internet free each month, aggregated across all AWS Services and Regions (except China and GovCloud). For more information, see the AWS Free Tier. To transfer data exceeding 500 TB per month, contact us.
DynamoDB free tier
The AWS Free Tier enables you to gain free, hands-on experience with AWS services. The following DynamoDB benefits are included as part of the AWS Free Tier. Each benefit is calculated monthly on a per-Region, per-payer account basis.
- 25 GB of data storage for tables using the DynamoDB Standard table class
- 2.5 million stream read requests from DynamoDB Streams
- 1 GB of data transfer out (15 GB for your first 12 months) aggregated across all AWS Services and Regions (except China and GovCloud)
DynamoDB pricing examples
-
• Basic example
This example demonstrates how DynamoDB charges using on-demand capacity mode.
Assume you create a new DynamoDB Standard table in the US East (N. Virginia) Region. Because this table is for a new application, you do not know what your traffic patterns will be. For simplicity, assume that each time a user interacts with your application, 1 write of 1 KB and 1 strongly consistent read of 1 KB are performed.
For a period of 10 days, you receive little traffic to your application, resulting in 10,000 reads and 10,000 writes on your table each day. However, on day 11 your application gains attention on social media, and application traffic spikes to 2,500,000 reads and 2,500,000 writes that day. DynamoDB scales to deliver a seamless experience to your users. Your application then settles into a more regular traffic pattern, averaging 50,000 reads and 50,000 writes each day through the end of the month. The following table summarizes your total usage for the month.
Timeframe (Day of Month)
Total Writes
Total Reads
1–10
100,000 writes (10,000 writes x 10 days)
100,000 reads (10,000 reads x 10 days)
11
2,500,000 writes
2,500,000 reads
12–30
950,000 writes (50,000 writes x 19 days)
950,000 reads (50,000 reads x 19 days)
Monthly total
3,550,000 writes
3,550,000 reads
Monthly bill
$4.44 ($1.25 per million writes x 3.55 million writes)
$0.89 ($0.25 per million reads x 3.55 million reads)
Data storage: Assume your table occupies 25 GB of storage at the beginning of the month and grows to 29 GB by the end of the month, averaging 27 GB based on DynamoDB continuous monitoring. Since your table class is set to DynamoDB Standard, the first 25 GB of storage are included in the AWS Free Tier. The remaining 2 GB of storage are charged at $0.25 per GB, resulting in a table storage cost of $0.50 for the month.
For the month, your bill will be $5.83, a total that includes $5.33 for reads and writes and $0.50 for data storage.
-
• Detailed example
This example demonstrates how DynamoDB charges using on-demand capacity mode.
Assume you create a new DynamoDB Standard table in the US East (N. Virginia) Region. Because this table is for a new application, you do not know what your traffic patterns will be. For simplicity, assume that each time a user interacts with your application, 1 write of 1 KB and 1 strongly consistent read of 1 KB are performed.
For a period of seven days, you receive little traffic to your application, resulting in 1,000 writes and reads to your table each day. However, on the eighth day your application gains the attention of a prominent influencer in your industry, and application traffic unexpectedly spikes to 10,000,000 writes and reads for the day. Your application then settles into a more regular traffic pattern, averaging 150,000 writes and reads each day for the next two weeks. Traffic then begins to trail off quickly, with transactions dropping to 10,000 writes and reads per day for the next seven days.
Finally, unexpected attention on social media causes your application to go viral. For the final day of the month, your application performs 30,000,000 writes and reads on your table. The following table summarizes your total usage for the month.
Timeframe (Day of Month)
Total Writes
Total Reads
1–7
7,000 writes (1,000 writes x 7 days)
7,000 reads (1,000 reads x 7 days)
8
10,000,000 writes
10,000,000 reads
9–22
2,100,000 writes (150,000 writes x 14 days)
2,100,000 reads (150,000 reads x 14 days)
23–29
70,000 writes (10,000 writes x 7 days)
70,000 reads (10,000 reads x 7 days)
30
30,000,000 writes
30,000,000 reads
Monthly total
42,177,000 writes
42,177,000 reads
Monthly bill
$52.72 ($1.25 per million writes x 42.177 million writes)
$10.54 ($0.25 per million reads x 42.177 million reads)
Data storage: Assume your table occupies 25 GB of storage at the beginning of the month and grows to 29 GB by the end of the month, averaging 27 GB based on continuous monitoring of your table size. Since your table class is set to DynamoDB Standard, the first 25 GB of storage are included in the AWS Free Tier. The remaining 2 GB of storage are charged at $0.25 per GB, resulting in a table storage cost of $0.50 for the month.
Backup and restore: If the sum of all your on-demand backup storage were 60 GB for a 30-day month, the monthly cost of your backups would be ($0.10 x 60 GB) = $6.00/month. However, if you delete 15 GB of your on-demand backup data 10 days into the monthly cycle, you are billed ($0.10 x 60 GB) - ($0.10 x 15 GB x 20/30) = $5.00/month. Now assume that in addition to performing on-demand backups, you use continuous backups. The average size of your table is 27 GB, resulting in a monthly cost of ($0.20 x 27 GB) = $5.40/month. If you need to restore your table at the end of the month, the cost is ($0.15 x 29 GB) = $4.35.
Change data capture for Kinesis Data Streams: Now assume you enable streaming to a Kinesis data stream to process your data changes using Amazon Kinesis services. DynamoDB charges one change data capture unit for each write of 1 KB it captures to the Kinesis data stream. Assuming your application write traffic from earlier in this example is consistent for your Kinesis data stream, this results in 42,177,000 change data capture units over the course of the month. Your monthly cost will be ($0.10 x 42,177,000/1,000,000) = $4.22.
Data export to Amazon S3: Let’s say you want to export table backups to Amazon S3 for analysis. If the size of your table at the specified point in time is 29 GB, the resulting export costs are: ($0.10 x 29 GB) = $2.90.
Integration with DynamoDB Accelerator (DAX): DAX is an Amazon DynamoDB-compatible caching service. You have determined that you need to accelerate the response time of your application and decide to use the DynamoDB Accelerator (DAX) service. You review the available hardware specifications and determine that a three-node cluster of the t2.small instance type will suit your needs. You enable DAX on day 26. DynamoDB charges $0.12 per hour ($0.04 x 3 nodes), totaling $14.40 for the final 5 days in the month ($0.12 x 120 hours).
Global tables: Now assume you choose to create a disaster recovery replica table in the US West (Oregon) Region. Assume that you add the replica in the US West (Oregon) Region when your table is 25 GB in size, resulting in $3.75 ($0.15 x 25 GB) of table restore charges. Adding this replica also generates 25 GB of data transfer, as detailed under the "Data transfer" section below. Also assume that your application traffic from earlier in this example is consistent for your global table. You will consume 84.35 million replicated write request units (42,177,000 writes x 2 Regions), as described in Best Practices and Requirements for Managing Global Tables, resulting in a charge of $158.16 (84.35 million replicated write request units x $1.875 per million). You also store an additional 27 GB of data in your replicated table in the US West (Oregon) Region. The first 25 GB of storage are included in the AWS Free Tier in each AWS Region for tables using the DynamoDB Standard table class. The remaining 2 GB of storage are charged at $0.25 per GB, resulting in additional table storage cost of $0.50 for the month.
DynamoDB Streams: Assume you enable DynamoDB Streams and build your application to perform one read request per second against the streams data. Over the course of a month, this results in 2,592,000 streams read requests, of which the first 2,500,000 read requests are included in the AWS Free Tier. You pay only for the remaining 92,000 read requests, which are $0.02 per 100,000 read request units.
Data transfer: Because you are transferring data between AWS Regions for your global tables implementation, DynamoDB charges for data transferred out of the Region but not for inbound data transfer. Assuming 42,177,000 writes of 1 KB each in the month, you would generate 40.22 GB in data to transfer between Regions. Adding the replica in the US West (Oregon) Region generates an additional 25 GB of data transfer. You will be charged $5.94 ($0.09 x [41 + 25]) GB) for inter-region data transfer.
In summary, your total monthly charges for a single-Region DynamoDB table are:
- Write traffic: $52.72
- Read traffic: $10.54
- Data storage: $0.50
- On-demand backup: $5.00
- Continuous (PITR) backup: $5.40
- Table restore: $4.35
- Change data capture for Kinesis Data Streams: $4.22
- Data export to Amazon S3: $2.90
- Integration with DynamoDB Accelerator (DAX), an Amazon DynamoDB-compatible caching service: $14.40
- DynamoDB Streams: $0.02
Total charges: $100.05
Your total monthly DynamoDB charges after adding the US West (Oregon) Region are:
- Read traffic: $10.54
- Data storage in US East (N. Virginia): $0.50
- On-demand backup: $5.00
- Continuous (PITR) backup: $5.40
- Table restore in US East (N. Virginia): $4.35
- Change data capture for Kinesis Data Streams: $4.22
- Data export to Amazon S3: $2.90
- Integration with DynamoDB Accelerator (DAX), an Amazon DynamoDB-compatible caching service: $14.40
- DynamoDB Streams: $0.02
- Global tables table restore in US West (Oregon): $3.75
- Global tables replicated write requests: $158.16
- Global tables data storage in US West (Oregon): $0.50
- Data transfer: $5.94
Total charges: $215.68
-
• Example using different table classes
In this example, we will demonstrate how you can reduce your table’s monthly charges by choosing the DynamoDB table class that best suits your table’s storage and data access patterns.
Assume you have a table in the US East (N. Virginia) Region. Your table already occupies 1 TB of historical data. The data is not frequently accessed but needs to be immediately available to your users when needed. Now, assume your data storage grows to 1.4 TB by the end of the month, averaging 1.2 TB based on continuous monitoring of your table size. Your table has a traffic pattern within the month that results in a total of 42.5 million writes and 42.5 million reads. For simplicity, assume that each time a user interacts with your application, 1 write of 1 KB and 1 strongly consistent read of 1 KB are performed.
We will start by estimating your table’s monthly charges using the DynamoDB Standard table class.
Monthly charges using DynamoDB Standard table class
Setting your table class to DynamoDB Standard, you will be billed as follows.
Data Storage: Using the DynamoDB Standard table class, the first 25 GB of storage are included in the AWS Free Tier. The remaining 1.175 TB of storage are charged at $0.25 per GB, resulting in a table storage cost of $293.75 for the month.
Reads and writes: You will be charged for
42.5 million writes x $1.25 per million writes = $53.125 for write requests,
42.5 million reads x $0.25 per million reads = $10.625 for read requests.In summary, your total monthly charges using DynamoDB Standard table class are:
- Write traffic: $53.125
- Read traffic: $10.625
- Data storage: $293.75
Your total monthly charges using the DynamoDB Standard table class are $357.50.
Monthly charges using DynamoDB Standard-IA table class
As shown previously, when using the DynamoDB Standard table class, the storage cost is greater than 50 percent of the costs of reads and writes. When storage is the dominant cost (greater than 50 percent of the costs of reads and writes) using DynamoDB Standard table class, you can optimize for cost by switching to the DynamoDB Standard-IA table class. Given the same workload, now assume that you switched the table class to DynamoDB Standard-IA at the beginning of the next month. You will be billed as follows.
Data storage: The 1.2 TB of storage are charged at $0.10 per GB, resulting in a table storage cost of $120.00 for the month.
Reads and writes: You will be charged for
42.5 million writes x $1.56 per million writes = $66.30 for write requests,
42.5 million reads x $0.31 per million reads = $13.18 for read requests.In summary, your total monthly charges using DynamoDB Standard-IA table class are:
- Write traffic: $66.30
- Read traffic: $13.18
- Data storage: $120.00
Total charges using DynamoDB Standard-IA table class: $199.48.
Using DynamoDB Standard-IA for your table reduces your table’s total monthly charges by 44.2%, or $158.03.
Additional pricing resources
Easily calculate your monthly costs with AWS
Contact AWS specialists to get a personalized quote
Get started building with Amazon DynamoDB on the AWS Management Console.