我正在学习terraform。我现在把我的地形码组织成-
main.tf
->modules
->route53
->network
->ec2这在大多数情况下都工作得很好,但现在我想分发启动服务器(运行我配置的一些程序的ec2)的全部方法,包括将route53域名作为变量和子网/安全组,它们是我的网络中的一个资源。我在route53/network/ec2等的模块中有很多资源。
是否有一个好的实践或模式或一次单击命令(例如,如果我想运行模块网络中的所有资源,我可以这样做)
target apply -f network所以我能做一些像这样的事情吗
terraform apply -target module.network.(resource) -target module.ec2.(resource) -target module.route53 等等。
发布于 2019-11-13 08:40:30
构建Terraform代码的最佳实践是
...在大多数情况下,我们强烈建议保持模块树的扁平化,只有一个级别的子模块,并使用与上面类似的使用表达式来描述模块之间关系的技术
来自:TF Module Composition guide
这基本上意味着:
provisioners)相同级别的文件夹中,使模块变小并遵守SRP (单一责任)。provisioners是在平面上组合模块调用的实际设置,而以后的模块调用可能使用flow中位于它们之前的模块调用的输出
这意味着:
- /modules
- /vpc
- vpc.tf
- /subnets_private
- subnets.tf
- routing_tables.tf
- /ecs_cluster
- iam_ecs.tf
- asg_ecs.tf
- /network
- /provisioners
- /staging
- /workload_cluster_core_domain
- main.tf
- /control_plane_network
- main.tf其中main.tf具有扁平结构:
module1--
|
--module2<-
|
->module3 其中每个module可以使用来自以下各项的输出:
module调用data调用。当然,你可以在状态级别上划分你的流,但你需要维护它,或者使用OOS框架,或者编写你自己的包装器(非常常见的方法btw) -但显然,这将需要在bash/go/python/node/etc中包装TF cli的使用。
https://stackoverflow.com/questions/58775373
复制相似问题