использование terraform / terragrunt для создания нескольких кластеров красного смещения, совместно использующих одну и ту же группу подсетей и группу безопасности - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь создать набор сценариев terraform / terragrunt для создания нескольких кластеров Redshift. Я бы хотел, чтобы все они использовали одну и ту же группу подсетей и группу безопасности, а также те, которые будут созданы, если они еще не существуют. Первоначально я попытался создать модуль «красное смещение», определенный как:

data "aws_vpc" "default" {
  default = true
}

data "aws_subnet_ids" "default" {
  vpc_id      = "${data.aws_vpc.default.id}"
}

resource "aws_security_group" "default" {
  name        = "${var.redshift_security_group_name}"
  vpc_id      = "${data.aws_vpc.default.id}"
}

resource "aws_redshift_subnet_group" "default" {
  name       = "${var.redshift_subnet_group_name}"
  subnet_ids = ["${data.aws_subnet_ids.default.ids}"]
}

module "redshift" {
  source  = "terraform-aws-modules/redshift/aws"
  version = "1.4.0"

  cluster_identifier           = "${var.cluster_identifier}"
  cluster_database_name        = "${var.cluster_database_name}"
  cluster_node_type            = "${var.cluster_node_type}"
  cluster_master_password      = "${var.cluster_master_password}"
  cluster_master_username      = "${var.cluster_master_username}"
  vpc_security_group_ids       = ["${aws_security_group.default.id}"]
  preferred_maintenance_window = "${var.preferred_maintenance_window}"
  publicly_accessible          = "${var.publicly_accessible}"
  redshift_subnet_group_name   = "${var.redshift_subnet_group_name}"
  parameter_group_name         = "${var.parameter_group_name}"
  cluster_number_of_nodes      = "${var.cluster_number_of_nodes}"
  cluster_iam_roles            = ["${var.cluster_iam_roles}"]
  tags                         = ["${var.tags}"]
}

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

Ответы [ 2 ]

0 голосов
/ 08 января 2019

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

Если в вашем случае вы правы, TF создаст ресурсы, если они не существуют, но вы неправильно поняли контекст. TF создаст их, если они не существуют в файле состояния, а не в AWS. Если два стека пытаются создать один и тот же ресурс с одинаковыми именами, стек 1 создаст их, стек 2 попытается, но потерпит неудачу, поскольку ресурс уже существует в AWS.

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

0 голосов
/ 04 января 2019

Если вы хотите иметь отношение «один ко многим» между вашей группой подсетей и вашими кластерами, то вам следует разделить сетевые компоненты на отдельный модуль, а не на красное смещение.

...