首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于分发内容的terrraform代码组织

用于分发内容的terrraform代码组织
EN

Stack Overflow用户
提问于 2019-11-09 08:38:19
回答 1查看 112关注 0票数 0

我正在学习terraform。我现在把我的地形码组织成-

代码语言:javascript
复制
  main.tf
   ->modules
    ->route53
    ->network
    ->ec2

这在大多数情况下都工作得很好,但现在我想分发启动服务器(运行我配置的一些程序的ec2)的全部方法,包括将route53域名作为变量和子网/安全组,它们是我的网络中的一个资源。我在route53/network/ec2等的模块中有很多资源。

是否有一个好的实践或模式或一次单击命令(例如,如果我想运行模块网络中的所有资源,我可以这样做)

代码语言:javascript
复制
target apply -f network

所以我能做一些像这样的事情吗

代码语言:javascript
复制
terraform apply -target module.network.(resource) -target module.ec2.(resource) -target module.route53 

等等。

EN

回答 1

Stack Overflow用户

发布于 2019-11-13 08:40:30

构建Terraform代码的最佳实践是

...在大多数情况下,我们强烈建议保持模块树的扁平化,只有一个级别的子模块,并使用与上面类似的使用表达式来描述模块之间关系的技术

来自:TF Module Composition guide

这基本上意味着:

  1. 将模块保存在其他git或与非模块tf文件(provisioners)相同级别的文件夹中,使模块变小并遵守SRP (单一责任)。
  2. 通过模块组合来组合复杂的流,记住DIP - Dependency Inversion
  3. Modules是单一责任抽象,而provisioners是在平面上组合模块调用的实际设置,而以后的模块调用可能使用flow

中位于它们之前的模块调用的输出

这意味着:

代码语言:javascript
复制
- /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具有扁平结构:

代码语言:javascript
复制
    module1--
             |    
  --module2<-  
  |   
  ->module3  

其中每个module可以使用来自以下各项的输出:

  • 之前(在依赖关系树中) module调用
  • data调用。

当然,你可以在状态级别上划分你的流,但你需要维护它,或者使用OOS框架,或者编写你自己的包装器(非常常见的方法btw) -但显然,这将需要在bash/go/python/node/etc中包装TF cli的使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58775373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档