Ensure DynamoDB Tables have Auto Scaling enabled

Error: DynamoDB Tables do not have Auto Scaling enabled

Bridgecrew Policy ID: BC_AWS_GENERAL_44
Checkov Check ID: CKV2_AWS_16
Severity: LOW

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"
  }
}