Как я могу получить экземпляр модуля записи AWS RDS в Terraform

Я использую модули 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.? Также что не так с вашим текущим кодом? Есть ошибки?

Marcin 19.11.2022 04:00

Привет, Марк, aws_rds_cluster.instances.*. конечная точка имеет все конечные точки. Нужно найти экземпляр писателя. Спасибо, что посмотрели. Крис ответил, и это сработало

user2586964 20.11.2022 20:44
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
2
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ваши объекты экземпляра будут возвращаться с атрибутом 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"

Привет Крис, Спасибо за вашу помощь отличный пример. Пробовал и получилось

user2586964 20.11.2022 20:43

Добро пожаловать. если ответ решил вашу проблему, отметьте его как принятый, чтобы вопрос не оставался без ответа

Chris Doyle 20.11.2022 20:56

Другие вопросы по теме