Это звучит как редкий вариант использования функции Terraform chunklist
, которая берет список и возвращает список списков с внутренними списками, содержащими не более заданного числа элементов.
variable "ip_addresses" {
type = list(string)
}
locals {
# ALB listener rules allow at most five values per rule.
# We're going to specify two per rule, which is within that limit.
ip_address_chunks = chunklist(var.ip_addresses, 2)
}
resource "aws_alb_listener_rule" "target" {
count = local.ip_address_chunks
listener_arn = data.aws_alb_listener.listener.arn
action {
target_group_arn = var.target_arn
type = "forward"
}
condition {
path_pattern {
values = ["/app"]
}
}
condition {
http_request_method {
values = ["POST"]
}
}
condition {
host_header {
values = ["my-app.domain.net"]
}
}
condition {
source_ip {
values = local.ip_address_chunks[count.index]
}
}
}
Предостережение с указанным выше - это то, что произойдет, если значение var.ip_addresses
изменится, когда правила прослушивателя уже существуют. Давайте начнем с исходного списка IP-адресов, которые вы задали в своем вопросе:
["11.11.11.11/24", "12.12.12.12/24", "13.13.13.13/24", "14.14.14.14/24", "15.15.15.15/24", "16.16.16.16/24"]
При первоначальном создании Terraform создаст следующие экземпляры aws_alb_listener-rule.target
:
aws_alb_listener-rule.target[0]
с ["11.11.11.11/24", "12.12.12.12/24"]
aws_alb_listener-rule.target[1]
с ["13.13.13.13/24", "14.14.14.14/24"]
aws_alb_listener-rule.target[2]
с ["15.15.15.15/24", "16.16.16.16/24"]
Если вы удалите 13.13.13.13/24
из списка и перепланируете, вы увидите, что Terraform хочет изменить правила следующим образом:
aws_alb_listener-rule.target[0]
с ["11.11.11.11/24", "12.12.12.12/24"]
aws_alb_listener-rule.target[1]
с ["14.14.14.14/24", "15.15.15.15/24"]
aws_alb_listener-rule.target[2]
с ["16.16.16.16/24"]
Это приведет к обновлению aws_alb_listener-rule.target[1]
и aws_alb_listener-rule.target[2]
, чтобы перераспределить новый список IP-адресов по правилам.
Поскольку каждое из этих двух изменений является отдельным удаленным вызовом API, стоит подумать о том, что произойдет, если aws_alb_listener-rule.target[2]
будет обновлено первым (15.15.15.15/24
временно будет вообще без правил), и если aws_alb_listener-rule.target[1]
будет обновлено первым (15.15.15.15/24
будет временно указано в двух правилах).