Module: dynamodb
Terraform module to provision a DynamoDB table with autoscaling.
Autoscaler scales up/down the provisioned OPS for the DynamoDB table based on the load.
Requirements
This module requires AWS Provider >= 4.22.0
Usage
For a complete example, see examples/complete.
For automated tests of the complete example using bats and Terratest (which tests and deploys the example on AWS), see test.
module "dynamodb_table" {
source = "cloudposse/dynamodb/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
namespace = "eg"
stage = "dev"
name = "cluster"
hash_key = "HashKey"
range_key = "RangeKey"
autoscale_write_target = 50
autoscale_read_target = 50
autoscale_min_read_capacity = 5
autoscale_max_read_capacity = 20
autoscale_min_write_capacity = 5
autoscale_max_write_capacity = 20
enable_autoscaler = true
}
Advanced Usage
With additional attributes, global secondary indexes and non_key_attributes
(see examples/complete).
module "dynamodb_table" {
source = "cloudposse/dynamodb/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
namespace = "eg"
stage = "dev"
name = "cluster"
hash_key = "HashKey"
range_key = "RangeKey"
autoscale_write_target = 50
autoscale_read_target = 50
autoscale_min_read_capacity = 5
autoscale_max_read_capacity = 20
autoscale_min_write_capacity = 5
autoscale_max_write_capacity = 20
enable_autoscaler = true
dynamodb_attributes = [
{
name = "DailyAverage"
type = "N"
},
{
name = "HighWater"
type = "N"
},
{
name = "Timestamp"
type = "S"
}
]
local_secondary_index_map = [
{
name = "TimestampSortIndex"
range_key = "Timestamp"
projection_type = "INCLUDE"
non_key_attributes = ["HashKey", "RangeKey"]
},
{
name = "HighWaterIndex"
range_key = "Timestamp"
projection_type = "INCLUDE"
non_key_attributes = ["HashKey", "RangeKey"]
}
]
global_secondary_index_map = [
{
name = "DailyAverageIndex"
hash_key = "DailyAverage"
range_key = "HighWater"
write_capacity = 5
read_capacity = 5
projection_type = "INCLUDE"
non_key_attributes = ["HashKey", "RangeKey"]
}
]
replicas = ["us-east-1"]
}
NOTE: Variables "global_secondary_index_map" and "local_secondary_index_map" have a predefined schema, but in some cases not all fields are required or needed.
For example:
non_key_attributes
can't be specified for Global Secondary Indexes (GSIs) whenprojection_type
isALL
read_capacity
andwrite_capacity
are not required for GSIs
In these cases, set the fields to null
and Terraform will treat them as if they were not provided at all, but will not complain about missing values:
global_secondary_index_map = [
{
write_capacity = null
read_capacity = null
projection_type = "ALL"
non_key_attributes = null
}
]
See Terraform types and values for more details.