Это не то, что вы в настоящее время можете сделать напрямую с Terraform, но я считаю, что проще просто перенести входные переменные в нужный формат, если это необходимо.
В качестве примера aws_lb_target_group
ресурс принимает параметр protocol
, который в настоящее время требует, чтобы он был в верхнем регистре, а не автоматически в верхнем регистре и не подавлял различия, такие как aws_lb_listener
ресурс делает для протокола (или даже protocol
в блоке health_check
).
Чтобы решить эту проблему, я просто использую функцию upper
при создании ресурса:
variable "protocol" {
default = "http"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
resource "aws_lb_target_group" "test" {
name = "tf-example-lb-tg"
port = 80
protocol = "${upper(var.protocol)}"
vpc_id = "${aws_vpc.main.id}"
}
Что касается проверки длины, я просто подставляю вещи, чтобы сделать их правильной длины. В настоящее время я делаю это для ALB, так как имя имеет максимальную длину 32, и я заставляю Gitlab CI создавать среды просмотра для некоторых служб, которые получают имя на основе фрагмента имени ветви Git, поэтому имеют небольшой контроль над используемой длиной.
variable "environment" {}
variable "service_name" {}
variable "internal" {
default = true
}
resource "aws_lb" "load_balancer" {
name = "${substr(var.environment, 0, min(length(var.environment), 27 - length(var.service_name)))}-${var.service_name}-${var.internal ? "int" : "ext"}"
internal = "${var.internal}"
security_groups = ["${aws_security_group.load_balancer.id}"]
subnets = ["${data.aws_subnet_ids.selected.ids}"]
}
С учетом вышеизложенного любая комбинация длины имени среды или службы приведет к тому, что пара имен среды / службы будет урезана максимум до 27 символов, что оставляет место для дополнительных символов, которые я хочу указать.