DynamoDB Tables do not have Auto Scaling enabled

Description

Checks if DynamoDB tables have autoscaling configuration. Note that for tables with billing_mode = “PAY_PER_REQUEST” such configuration is embedded by default.

Fix - Buildtime

Terraform
  • Resource: aws_appautoscaling_target, aws_appautoscaling_policy, aws_dynamodb_table

resource “aws_dynamodb_table” “pass” {

name = “user”

hash_key = “user-id”

billing_mode = “PROVISIONED”

read_capacity = 10

write_capacity = 10

attribute {

name = “user-id”

type = “S”

}

}

resource “aws_appautoscaling_target” “pass” {

resource_id = “table/${aws_dynamodb_table.pass.name}”

scalable_dimension = “dynamodb:table:ReadCapacityUnits”

service_namespace = “dynamodb”

min_capacity = 1

max_capacity = 15

}

resource “aws_appautoscaling_policy” “pass” {

name = “rcu-auto-scaling”

service_namespace = aws_appautoscaling_target.pass.service_namespace

scalable_dimension = aws_appautoscaling_target.pass.scalable_dimension

resource_id = aws_appautoscaling_target.pass.resource_id

policy_type = “TargetTrackingScaling”

target_tracking_scaling_policy_configuration {

predefined_metric_specification

{

predefined_metric_type = “RDSReaderAverageCPUUtilization”

predefined_metric_type = “DynamoDBReadCapacityUtilization”

}

}

}

// or:

resource “aws_dynamodb_table” “pass_on_demand” {

name = “user”

hash_key = “user-id”

billing_mode = “PAY_PER_REQUEST”

attribute {

name = “user-id”

type = “S”

}

}

ReLambda