Amazon web services 组织代码以分发内容
我正在学习地形。 我的地形代码目前组织为-Amazon web services 组织代码以分发内容,amazon-web-services,terraform,Amazon Web Services,Terraform,我正在学习地形。 我的地形代码目前组织为- main.tf ->modules ->route53 ->network ->ec2 这在大多数情况下都很有效,但我现在想发布启动服务器的整个方法(ec2,其中一些程序我配置为运行),包括作为变量的route53域名和作为网络资源的子网/安全组。 我在route53/network/ec2等模块中有大量资源。 是否有良好的实践或模式或单击命令(例如,如果我只想运行模块网络中我可以执行的所有资
main.tf
->modules
->route53
->network
->ec2
这在大多数情况下都很有效,但我现在想发布启动服务器的整个方法(ec2,其中一些程序我配置为运行),包括作为变量的route53域名和作为网络资源的子网/安全组。
我在route53/network/ec2等模块中有大量资源。是否有良好的实践或模式或单击命令(例如,如果我只想运行模块网络中我可以执行的所有资源) 那么我能做些类似的事情吗
terraform apply -target module.network.(resource) -target module.ec2.(resource) -target module.route53
等等。构建地形代码的最佳实践是 。。。在大多数情况下,我们强烈建议保持模块树平坦,只包含一级子模块,并使用类似于上述使用表达式描述模块之间关系的技术 发件人: 基本上这意味着:
provisioners
),使模块变小并遵守SRP(单一责任)李>
- /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
模块1--
|
--模块2模块3
其中每个模块可以使用以下输出:
- 前面(在依赖关系树中)
模块
调用
数据
调用
当然,您可以在状态级别对流进行分区,但您需要对其进行维护,或者使用OOS框架、la Terragrunt,或者编写自己的包装器(非常常见的方法是btw)——但这显然需要在bash/go/python/node/等中包装TF cli用法。构建Terraform代码的最佳实践是
。。。在大多数情况下,我们强烈建议保持模块树平坦,只包含一级子模块,并使用类似于上述使用表达式描述模块之间关系的技术
发件人:
基本上这意味着:
将模块保存在其他git或与非模块tf文件相同级别的文件夹中(provisioners
),使模块变小并遵守SRP(单一责任)李>
通过模块组合构成复杂流程,考虑到:
模块是单责任抽象,而供应器是组成模块调用的实际设置-在平面上,而稍后的模块调用可能会在流中使用它们前面的模块调用的输出
这意味着:
- /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
模块1--
|
--模块2模块3
其中每个模块可以使用以下输出:
- 前面(在依赖关系树中)
模块
调用
数据
调用
当然,您可以在状态级别对流进行分区,但是您需要维护它,或者使用OOS框架、la Terragrunt,或者编写您自己的包装器(非常常见的方法,顺便说一句)-但是,显然,将需要在bash/go/python/node/etc中包装TF cli用法。您将在根模块配置中仅声明网络
模块。谢谢,但我为什么要这样做?您将在根模块配置中仅声明网络
模块。谢谢,但我为什么要这样做?