【发布时间】:2018-02-13 23:37:18
【问题描述】:
我一直在测试 terraform (v.0.10) 以在 AWS 中为企业预置 EC2 实例、安全组、RDS 实例等。
我正在使用模块方法,以便可以为我的每个环境“获取”这些内容:
apps:
main.tf
app.tf
vars.tf
sec_groups:
main.tf
sec_group.tf
vars.tf
:
:
对于我的每个环境(非产品、产品),我都在采购这些模块,并将 terraform 状态存储在远程 s3 存储桶中 - 每个环境一个存储桶。
我为每个环境提供必要的变量,例如子网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
:
:
阅读了各种类型的变量(字符串、列表、映射)后,我不确定我所问的是否可能,但它允许所有环境都可以从中提取集中式(全局)数据源。
我很想知道以前是否有人考虑过/研究过这种方法,或者是否有一种我可能会遗漏的更简单的方法。
任何想法或cmets将不胜感激。
干杯
【问题讨论】:
-
我想我应该在这个问题后面解释更多 - 想要考虑使用散列的原因(以某种方式)类似于你在 puppet 中使用 hiera 的方式:通用键值对系统,可以在哈希值较低的位置被覆盖。合并将允许单一数据源最大限度地减少变量重复的使用。
标签: amazon-ec2 terraform