Несколько экземпляров с использованием одной и той же переменной - PullRequest
1 голос
/ 10 июля 2020

У меня есть модуль для создания баз данных в AWS:

resource "aws_rds_cluster_instance" "db_instances" {
  count      = lookup(var.argument, "count")
  identifier = lookup(var.argument, "identifier", count.index)
}

Переменная аргумента выглядит следующим образом:

variable "argument" {
  type = map(string)
}

В моем root main.tf, когда я попробуйте создать 2 экземпляра db, я получаю сообщение об ошибке, поскольку они оба пытаются использовать одно и то же имя идентификатора, однако, поскольку я использовал count.index в модуле, я думал, что он позаботится о добавлении числа в конце имени db .

variable "argument" {
  default = {
    count      = 2
    identifier = "my-db-name"
  }
}

Как сделать так, чтобы имена моих БД становились «my-db-name-0» и «my-db-name-1»?

Ответы [ 2 ]

3 голосов
/ 10 июля 2020

Судя по всему, вы уже используете terraform 0.12 ... Я бы порекомендовал вам использовать for_each, чтобы вы могли иметь больше свойств в своей переменной RDS, ниже приведен пример

variable "rds" {
  default = {
    "my-db-name-0" = {
      engine         = "foo"
      instance_class = "db.r4.large"
    }
    "my-db-name-1" = {
      engine         = "bar"
      instance_class = "db.r4.small"
    }
}

resource "aws_rds_cluster_instance" "db_instance" {
  for_each = var.rds

  identifier     = each.key
  engine         = each.value.engine
  instance_class = each.value.instance_class
}

Таким образом, имена идентификаторов могут быть любыми, какими вы хотите ... и это дает вам возможность настраивать аргументы каждого экземпляра: https://www.terraform.io/docs/providers/aws/r/rds_cluster_instance.html#argument -ссылка

2 голосов
/ 10 июля 2020

Это можно сделать с помощью функции соединения в сочетании со значением count.index.

resource "aws_rds_cluster_instance" "db_instances" {
  count      = lookup(var.argument, "count")
  cluster_identifier = join("-", [lookup(var.argument, "identifier"), count.index])
  instance_class = "db.t2.small"
}
...