Conditional create object with count Terraform
Object variable:
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:
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:
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:
> 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