首页 > 解决方案 > Terraform 找不到匹配的安全组

问题描述

我正在尝试为 Dev 和 QA 环境配置我的 terraform,每个环境都有自己的安全组,我用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安全组只存在于开发环境中,所以当我针对 QA 环境时,我仍然得到:

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

标签: amazon-web-servicesterraformaws-security-groupterraform-provider-aws

解决方案


根据 Terraform文档,您可以指定条件操作,如下所示:

健康)状况 ?真值:假值

然后,例如,您可以按如下方式定义您的安全组:

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.


推荐阅读