# Conditional create object with count Terraform

Object variable:

```plaintext
variable "autoscaling_read" {
  description = "A map of read autoscaling settings."
  type        = object({
    max_capacity = optional(number)
    scale_in_cooldown = optional(number)
    scale_out_cooldown = optional(number)
    target_value = optional(number)
  })
  default     = {}
}
```

In code:

```plaintext
resource "aws_appautoscaling_target" "table_read" {
  count = var.create_table && var.autoscaling_enabled && anytrue([for i in var.autoscaling_read : i != null]) ? 1 : 0

  max_capacity       = var.autoscaling_read["max_capacity"]
  min_capacity       = var.read_capacity
  resource_id        = "table/${try(aws_dynamodb_table.autoscaled[0].name, aws_dynamodb_table.autoscaled_gsi_ignore[0].name)}"
  scalable_dimension = "dynamodb:table:ReadCapacityUnits"
  service_namespace  = "dynamodb"
}
```

When object becomes map of object:

```plaintext
variable "autoscaling_read" {
  description = "A map of read autoscaling settings."
  type        = map(object({
    max_capacity = optional(number)
    scale_in_cooldown = optional(number)
    scale_out_cooldown = optional(number)
    target_value = optional(number)
  }))
  default     = {
    1 = {
        max_capacity = 15
    }
    2 = {
        max_capacity = 40
    }
    3 = {}
  }
}
```

Terraform console:

```plaintext
> alltrue([for i in var.autoscaling_read : i != null])
true

> anytrue([for i in var.autoscaling_read : i != null])
true

> anytrue([for i in var.autoscaling_read : i == null])
false

> alltrue([for i in var.autoscaling_read : i == null])
false

> anytrue([for i in var.autoscaling_read : i.max_capacity == null])
true

> alltrue([for i in var.autoscaling_read : i.max_capacity == null])
false
```
