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 

等等。

构建地形代码的最佳实践是

。。。在大多数情况下,我们强烈建议保持模块树平坦,只包含一级子模块,并使用类似于上述使用表达式描述模块之间关系的技术

发件人:

基本上这意味着:

  • 将模块保存在其他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,或者编写自己的包装器(非常常见的方法是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用法。

    您将在根模块配置中仅声明
    网络
    模块。谢谢,但我为什么要这样做?您将在根模块配置中仅声明
    网络
    模块。谢谢,但我为什么要这样做?