curena
10/20/2017 - 7:35 PM

Terraform DynamoDB AutoScaling

Terraform DynamoDB AutoScaling Policy

resource "aws_appautoscaling_target" "write_capacity_target" {
  max_capacity       = "${var.max_write_capacity}"
  min_capacity       = 20
  resource_id        = "table/${aws_dynamodb_table.my_table.id}"
  scalable_dimension = "dynamodb:table:WriteCapacityUnits"
  service_namespace  = "dynamodb"
  role_arn = "${var.my_role_arn}"
}

resource "aws_appautoscaling_target" "read_capacity_target" {
  max_capacity       = "${var.max_read_capacity}"
  min_capacity       = 20
  resource_id        = "table/${aws_dynamodb_table.my_table.id}"
  scalable_dimension = "dynamodb:table:ReadCapacityUnits"
  service_namespace  = "dynamodb"
  role_arn = "${var.my_role_arn}"
}

resource "aws_appautoscaling_policy" "write_capacity_policy" {
  policy_type = "TargetTrackingScaling"
  adjustment_type         = "PercentChangeInCapacity"
  cooldown                = 60
  metric_aggregation_type = "Maximum"
  min_adjustment_magnitude = 10
  name                    = "scale-write"
  resource_id             = "table/${aws_dynamodb_table.my_table.id}"
  scalable_dimension      = "dynamodb:table:WriteCapacityUnits"
  service_namespace       = "dynamodb"

  step_adjustment {
    metric_interval_lower_bound = 1.0
    metric_interval_upper_bound = 5.0
    scaling_adjustment = -4
  }

  step_adjustment {
    metric_interval_lower_bound = 6.0
    metric_interval_upper_bound = 10.0
    scaling_adjustment = 4
  }

  depends_on = ["aws_appautoscaling_target.write_capacity_target"]
}

resource "aws_appautoscaling_policy" "read_capacity_policy" {
  policy_type = "TargetTrackingScaling"
  adjustment_type         = "PercentChangeInCapacity"
  cooldown                = 60
  metric_aggregation_type = "Maximum"
  min_adjustment_magnitude = 10
  name                    = "scale-read"
  resource_id             = "table/${aws_dynamodb_table.my_table.id}"
  scalable_dimension      = "dynamodb:table:ReadCapacityUnits"
  service_namespace       = "dynamodb"

  step_adjustment {
    metric_interval_lower_bound = 1.0
    metric_interval_upper_bound = 5.0
    scaling_adjustment = -4
  }

  step_adjustment {
    metric_interval_lower_bound = 6.0
    metric_interval_upper_bound = 10.0
    scaling_adjustment = 4
  }

  depends_on = ["aws_appautoscaling_target.read_capacity_target"]
}