Условный Terraform - ресурс утверждения определяется в зависимости от того, является ли переменная x или y

У меня есть ресурс Elastic Beanstalk, который содержит несколько необязательных настроек. Одним из них является очередь в зависимости от того, является ли tier EB worker или нет.

Шаблон, вызывающий этот модуль, имеет значение worker.

То, что я хотел бы сделать, это то, что позволяет достичь следующего: if tier == worker; assert queue != null

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

Моя текущая итерация такова, но я чувствую, что она слишком запутана, и есть лучший подход (и он не работает):

/eb template
resource "aws_elastic_beanstalk_environment" "default" {
  name                   = var.name
  application            = var.application_name
  tier                   = var.tier
  solution_stack_name    = var.solution_stack_name

  //Worker setting
  setting {
    //count     = var.is_worker_tier ? 1 : 0
    namespace = "aws:elasticbeanstalk:sqsd"
    name      = var.worker_queue_name
    value     = var.queue //only set if worker.
  }
}

//vars
variable "is_worker_tier" {
  type = boolean
  default = false
  description = "when true will create the sqs queue optional setting"
}

//where the module is called
module "test_beanstalk_3" {
  tier = "Worker"
  queue = "myQueue"
///
}

в качестве расширения этого я хотел бы обеспечить, чтобы имя очереди и URL-адрес были установлены. Например, у меня есть:

variable "worker_queue_name" {
  type = string
  default = "WorkerQueueURL"
  description = "name of the worker queue, replace with arn if able to."
}

variable "queue" {
  type = string
  default = ""
  description = "List of application subnet ids"
}

В настоящее время это могут быть пустые строки при создании рабочего процесса, который я бы очень хотел обновить, чтобы `if worker; переменная.очередь != ""

Можете ли вы предоставить действительный код перехода? То, что вы предоставили, не является действительным кодом TF и ​​никогда не будет работать. Что такое }(and it или setting?

Marcin 04.04.2022 10:26

Эй, @Marcin, этот блок в конце - опечатка в моем посте, я его отредактирую.

steve 04.04.2022 10:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете сделать это с помощью динамический блок:

resource "aws_elastic_beanstalk_environment" "default" {
  name                   = var.name
  application            = var.application_name
  tier                   = var.tier
  solution_stack_name    = var.solution_stack_name

  //Worker setting
  dynamic "setting"{
    for_each = var.tier == "Worker" ? [1] : [] 
    content {
      namespace = "aws:elasticbeanstalk:sqsd"
      name      = var.worker_queue_name
      value     = var.queue //only set if worker.
    }
  }
}

Спасибо, Марчин, это здорово. Досадно, что у меня уже есть динамический блок, но я не рассматривал его для этой цели :( Могу ли я спросить, является ли «is_worker_tier» разумным вариантом? Было бы лучше или более целесообразно вместо этого проверить значение уровня и удалить это лишнее логическое значение?

steve 04.04.2022 10:52

@ Стив Нет проблем. У вас должно быть какое-то условие, но вы можете просто использовать var.tier. Я обновил ответ.

Marcin 04.04.2022 10:58

Еще раз спасибо, Марчин. Есть еще один последний компонент, с которым вы можете помочь, и он утверждает, что имя очереди не является «», когда установлен рабочий уровень. Я обновил вопрос, если у вас есть минутка, чтобы взглянуть

steve 04.04.2022 11:49

@steve Извините, я не понимаю, что вы имеете в виду. Возможно, новый вопрос с новым кодом будет более понятным.

Marcin 04.04.2022 12:00

Конечно, я создам еще один вопрос, так как это может быть проще. Я просто пытаюсь обеспечить, чтобы значение рабочей очереди не оставалось пустой строкой, когда рабочий является уровнем. Хотя я не уверен, как это отразится на терраформе. В обновленном вопросе, когда у меня есть «queue = myQueue», я хотел бы убедиться, что это происходит, когда уровень является рабочим, а не использует значение по умолчанию для пустой строки.

steve 04.04.2022 12:04

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