У меня есть ресурс 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; переменная.очередь != ""
Эй, @Marcin, этот блок в конце - опечатка в моем посте, я его отредактирую.
Вы можете сделать это с помощью динамический блок:
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» разумным вариантом? Было бы лучше или более целесообразно вместо этого проверить значение уровня и удалить это лишнее логическое значение?
@ Стив Нет проблем. У вас должно быть какое-то условие, но вы можете просто использовать var.tier
. Я обновил ответ.
Еще раз спасибо, Марчин. Есть еще один последний компонент, с которым вы можете помочь, и он утверждает, что имя очереди не является «», когда установлен рабочий уровень. Я обновил вопрос, если у вас есть минутка, чтобы взглянуть
@steve Извините, я не понимаю, что вы имеете в виду. Возможно, новый вопрос с новым кодом будет более понятным.
Конечно, я создам еще один вопрос, так как это может быть проще. Я просто пытаюсь обеспечить, чтобы значение рабочей очереди не оставалось пустой строкой, когда рабочий является уровнем. Хотя я не уверен, как это отразится на терраформе. В обновленном вопросе, когда у меня есть «queue = myQueue», я хотел бы убедиться, что это происходит, когда уровень является рабочим, а не использует значение по умолчанию для пустой строки.
Можете ли вы предоставить действительный код перехода? То, что вы предоставили, не является действительным кодом TF и никогда не будет работать. Что такое
}(and it
илиsetting
?