Terraform не найдена подходящая группа безопасности

Я пытаюсь настроить свой terraform для сред Dev и QA, каждая из которых имеет свои собственные группы безопасности, которые я указываю с помощью тега data:

data "aws_security_group" "ssh" {
  name = "SG-SSH"
}

data "aws_security_group" "postgres" {
  name = "SG-Postgres"
}

Есть ли способ указать, какие группы безопасности будут задействованы в зависимости от целевой среды? Я пробовал это:

locals {
  sgs = {
    dev  = ["${data.aws_security_group.postgres.id}", "${data.aws_security_group.ssh.id}"]
    qa   = ["${data.aws_security_group.postgres.id}"]
  }
}

Затем я ссылаюсь на "${local.sgs[var.env]}". Однако группа безопасности ssh существует только в среде разработки, поэтому, когда я нацелен на среду контроля качества, я все равно получаю:

data.aws_security_group.ssh: data.aws_security_group.ssh: no matching SecurityGroup found

person covfefe    schedule 23.07.2018    source источник
comment
Создание ssh SG в среде QA запрещено :(   -  person covfefe    schedule 23.07.2018


Ответы (1)


Согласно документации Terraform, условные операции можно указать следующим образом:

СОСТОЯНИЕ ? TRUEVAL: FALSEVAL

Затем, например, вы можете определить свои группы безопасности следующим образом:

locals {
  sgs = "${var.env == "dev" ? ["${data.aws_security_group.postgres.id}", "${data.aws_security_group.ssh.id}"] : ["${data.aws_security_group.postgres.id}"]}"
}

И вызовите его с помощью "${local.sgs}" - что получит все группы безопасности в зависимости от среды, указанной в var.env.

person moebius    schedule 26.07.2018