Terraform 未找到匹配的安全组

cov*_*efe 5 amazon-web-services terraform aws-security-group terraform-provider-aws

我正在尝试为开发和 QA 环境配置我的 terraform,每个环境都有自己的安全组,我用data

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

data "aws_security_group" "postgres" {
  name = "SG-Postgres"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法根据目标环境指定拉入哪些安全组?我试过这个:

locals {
  sgs = {
    dev  = ["${data.aws_security_group.postgres.id}", "${data.aws_security_group.ssh.id}"]
    qa   = ["${data.aws_security_group.postgres.id}"]
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我用 来引用"${local.sgs[var.env]}"。但是,ssh安全组仅存在于开发环境中,因此当我针对 QA 环境时,我仍然得到:

data.aws_security_group.ssh: data.aws_security_group.ssh: no matching SecurityGroup found
Run Code Online (Sandbox Code Playgroud)

moe*_*ius 0

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

健康)状况 ?真值 : 假值

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

locals {
  sgs = "${var.env == "dev" ? ["${data.aws_security_group.postgres.id}", "${data.aws_security_group.ssh.id}"] : ["${data.aws_security_group.postgres.id}"]}"
}
Run Code Online (Sandbox Code Playgroud)

并用"${local.sgs}"- 调用它,这将根据 中指定的环境获取所有安全组var.env