Я использую модули terraform aws_rds_cluster и aws_rds_cluster_instances для предоставления кластера AWS RDS (mysql). Это создает кластер с одной репликой записи и двумя репликами чтения. В output.tf мне нужно получить конечную точку экземпляра модуля записи RDS.
output "rds_writer_instance_endpoint {
value = aws_rds_cluster.instances.*.endpoint
}
Я получил все конечные точки для трех экземпляров «aws_rds_cluster.instances.*.endpoint». Как получить только конечную точку записи?
Привет, Марк, aws_rds_cluster.instances.*. конечная точка имеет все конечные точки. Нужно найти экземпляр писателя. Спасибо, что посмотрели. Крис ответил, и это сработало
ваши объекты экземпляра будут возвращаться с атрибутом writer
. https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_instance#attributes-reference
писатель — логическое значение, указывающее, доступен ли этот экземпляр для записи. False указывает, что этот экземпляр является репликой чтения.
Вы можете использовать этот атрибут для фильтрации списка и возврата только тех объектов, у которых для этого значения установлено значение true. Предполагая, что только один экземпляр может быть автором, я затем использую функцию one
terraform, чтобы установить вывод как значение списка.
output "rds_writer_instance_endpoint {
value = one([for instance in aws_rds_cluster.instances]: var.endpoint if var.writer])
}
В качестве примера этого в действии я создал список переменных, которые представляют ресурс ваших экземпляров, и применил к нему приведенный выше шаблон.
variable "instances" {
type = list(object({
endpoint = string
writer = bool
}))
default = [
{
endpoint = "http:localhost:8080"
writer = false
},
{
endpoint = "http:localhost:8081"
writer = true
},
{
endpoint = "http:localhost:8082"
writer = false
}
]
}
output "all_out" {
value = var.instances.*.endpoint
}
output "writer" {
value = one([for instance in var.instances: instance.endpoint if instance.writer])
}
ВЫВОД
Outputs:
all_out = tolist([
"http:localhost:8080",
"http:localhost:8081",
"http:localhost:8082",
])
writer = "http:localhost:8081"
Привет Крис, Спасибо за вашу помощь отличный пример. Пробовал и получилось
Добро пожаловать. если ответ решил вашу проблему, отметьте его как принятый, чтобы вопрос не оставался без ответа
Какое определение для
aws_rds_cluster.instances.
? Также что не так с вашим текущим кодом? Есть ошибки?