我一直在测试terraform(v.0.10),为企业在AWS中配置EC2实例,安全组,RDS实例等。terraform可以使用可变散列或映射或映射在.tf文件中创建数据条目吗?
我使用一个模块的方法,这样可以将这些“来源”为我的每一个环境:
apps:
main.tf
app.tf
vars.tf
sec_groups:
main.tf
sec_group.tf
vars.tf
:
:
对于每一个我的环境中(非督促,督促)我采购这些模块,并将terraform状态存储在远程s3存储桶中 - 每个环境一个存储桶。
我为每个环境提供像subnet_cidrs,VPC名称等等的必要变量,并创建环境:VPC具有相关的子网,其中包含相关的EC2实例......都很好!
当我使用各自的规则来添加安全组(我在各种类型的EC2实例和环境中有许多安全组)时,我的挑战就来了。
虽然我可以在合适的sec_group.tf文件中创建规则库并添加出口/入口规则(每个规则都有它们的from_port,to_port,protocol,cidr_blocks ..)我想知道是否可以基于(json)数据散列?
我的想法是,这种全球数据层次结构可以用来保存规则,并且可以处理它们来为每个环境收集相关规则,并且只应用那些与'terraform apply'正在运行的当前环境相关的规则,那里有2或200条规则。事情是这样的:
non-prod-env:
ssh:
from_port: 22
to_port: 22
protocol: "tcp"
cidr_blocks:
- 10.1.1.1
- 10.2.2.2
:
:
smtp:
from_port: 25
to_port: 25
protocol: "tcp"
cidr_blocks:
- 100.1.1.1
- 100.2.2.2
:
:
prod-env:
ssh:
from_port: 22
to_port: 22
protocol: "tcp"
cidr_blocks:
- 11.1.1.1
- 11.2.2.2
:
:
已经阅读各种类型的瓦尔(字符串,列表,地图),我不知道如果我要问,甚至有可能,但它将允许的集中(全球)来源所有环境都可以从中获得的数据。
我想知道以前是否有人考虑/调查过这种方法,或者是否有更简单的方法可能会丢失。
任何想法或意见,将不胜感激。
干杯
我想我应该在这个问题背后解释更多 - 想要考虑使用散列(有些时候,一些如何)的原因与您在木偶中使用hiera的方式类似:要有一个通用的键盘系统,可能被覆盖的值对降低了散列值。合并将允许使用变量重复的单一数据源最小化。 –