Nano Hash - криптовалюты, майнинг, программирование

Terraform зацикливает модуль

У меня есть модуль в моем файле terraform, который создал несколько серверов баз данных, которые делают несколько вещей.

Сначала он создает группу автоматического масштабирования для использования определенного изображения, затем он создает несколько томов EBS и присоединяет их, а затем добавляет некоторый лямбда-код, чтобы при запуске экземпляры регистрировались на маршруте 53. Таким образом, всего около 80 строк текста.

Извлекать

module "systemt-sql-db01" {
  source          = "localmodules/tf-aws-asg"
  name            = "${var.envname}-sys-db01"
  envname         = "${var.envname}"
  service         = "dbpx"
  ami_id          = "${data.aws_ami.app_sqlproxy.id}"
  user_data       = "${data.template_cloudinit_config.config-enforcement-sqlproxy.rendered}"
   #subnets         = ["${module.subnets-enforcement.web_private_subnets}"]
  subnets         = ["${element(module.subnets-enforcement.web_private_subnets, 1)}"]
  security_groups = ["${aws_security_group.unfiltered-egress-sg.id}", "${aws_security_group.sysopssg.id}", "${aws_security_group.system-sqlproxy.id}"]
  key_name        = "${var.keypair}"    

  load_balancers       = ["${var.envname}-enf-dbpx-int-elb"]
  iam_instance_profile = "${module.iam_profile_generic.profile_arn}"

  instance_type = "${var.enforcement_instancesize_dbpx}"

  min = 0
  max = 0
}

Затем у меня есть два файла параметров, один из которых вызывается при запуске в предварительную версию, а второй - при запуске в производство. Я не хочу, чтобы они содержали что-либо, кроме переменных.

Проблема в том, что для производства мне нужно дважды вызвать модуль, но для производства мне нужно, чтобы он вызывается три раза.

Люди говорят о функции подсчета для модулей, но я пока не думаю, что это возможно. Может ли кто-нибудь предложить другие способы сделать это? Я бы хотел, чтобы в моем файле параметров можно было установить переменную списка всех имен DB ASG, а затем каждый раз перебирать этот вызов модуля.

Надеюсь это имеет смысл?

Спасибо


  • Для справки: вот соответствующая проблема GitHub для использования count в модулях. 10.07.2017
  • Привет, да, я видел это, но мне было интересно, есть ли другой способ сделать это. Расчет на модуль может быть не лучшим, в идеале я хотел бы иметь возможность передавать различные переменные в модуль каждый раз, когда он вызывается. ] 10.07.2017
  • Функция подсчета по-прежнему отсутствует на уровне модуля, поэтому вы можете использовать один и тот же модуль дважды с разными именами в файле .tf. Представьте, что ваш модуль - это функция, и вы вызываете одну и ту же функцию несколько раз с разными параметрами в вашем коде. 16.08.2019

Ответы:


1

РЕДАКТИРОВАТЬ Циклы в модулях находятся на стадии бета-тестирования для Terraform 0.13 (https://discuss.hashicorp.com/t/terraform-0-13-beta-released/9555).

Это очень востребованная функция в Terraform, и, как уже упоминалось, она еще не поддерживается. В более поздних версиях Terraform v0.12 эта функция будет представлена ​​(https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each).

У меня была аналогичная проблема, когда мне пришлось создать несколько ключей KMS для нескольких учетных записей из базового модуля KMS. В итоге я создал второй модуль, который использует основной модуль KMS, у этого второго модуля было много экземпляров основного модуля, но мне требовалось только один раз ввести данные учетной записи.

Это все еще не идеально, но работает достаточно хорошо, не усложняя ситуацию.

16.08.2019
  • Для справки, это все еще не работает в terraform 0.12. Они не допускают dynamic module блоков 13.09.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..