amazon-web-services - 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
解决方案
根据 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
.
推荐阅读
- python - 使用 setuptools 构建 Python 源代码分发包时忽略 git 存储库
- javascript - 在再次执行之前等待部分异步函数完成
- java - Java未检测到同一目录中的类文件
- python - 如何在 Praw 中获取用户对象?
- android - 如何将 ViewModel 与 Repository 连接,以便将数据传播到 View(MVVM、Livedata)
- r - 如何使用dyplr在不丢失R中小数位的情况下获得列的平均值?
- c# - ArrayList 排序顺序不正确;选择排序
- python-2.7 - 如何修复:ValueError:long() 以 10 为底的无效文字
- python - 烧瓶读取json文件
- node.js - 将 API KEY 添加到 Alexa Skill 的 Get 请求