使用Terraform,我如何协调部署许多相关/依赖堆栈?

使用Terraform,我如何协调部署许多相关/依赖堆栈?,terraform,Terraform,CloudFormation不提供用于编排多个/多个堆栈部署的工具。例如,考虑一个微服务/分层体系结构,其中需要将许多堆栈部署在一起以复制环境。对于cloudformation,您需要使用stacker之类的工具或自行开发的工具来解决问题 Terraform是否提供多堆栈部署编排解决方案 Terraform在目录级别上运行,因此您可以简单地在同一位置将两个堆栈定义为一大组资源或模块 在Terraform中,如果您需要同时部署多个资源,那么您通常会使用一个,然后提供一个较小的表面积来配置该模块。这

CloudFormation不提供用于编排多个/多个堆栈部署的工具。例如,考虑一个微服务/分层体系结构,其中需要将许多堆栈部署在一起以复制环境。对于cloudformation,您需要使用stacker之类的工具或自行开发的工具来解决问题


Terraform是否提供多堆栈部署编排解决方案

Terraform在目录级别上运行,因此您可以简单地在同一位置将两个堆栈定义为一大组资源或模块

在Terraform中,如果您需要同时部署多个资源,那么您通常会使用一个,然后提供一个较小的表面积来配置该模块。这也扩展到创建模块中的模块

因此,如果您创建了一个模块,该模块部署了一个包含负载平衡器的服务,即某种形式的服务(例如ECS任务定义;Kubernetes pod、服务、部署等定义;AMI)一个数据库和另一个模块,其中包含一个队列和另一个服务。然后,您可以创建一个包含这两个模块的总体模块,以便同时部署它们,并在它们之间共享少量配置


模块还允许您将定义为远程(如git位置)或从Terraform注册表(公共注册表或私有注册表)定义这意味着模块的地形代码不必存储在同一个地方,也不必签出/克隆到同一个目录。

谢谢@ydaetskcoR-你是说如果我在同一级别定义两个堆栈,那么我可以用一个命令部署这两个堆栈吗?据我所知,Terraform一次操作一个堆栈。重新。模块,这里的问题是使用每个堆栈的模块,一次部署一个模块并不安全。整个父堆栈显然应该立即部署。我试图避免在一个堆栈定义中定义整个infra的情况。我希望能够安全地部署indiv。如果我愿意(在类似产品的场景中)堆叠,或者如果我愿意(在测试中)堆叠在一起。很难说没有看到您的代码结构,但我建议将内容拆分为您希望部署的最小内容(例如服务及其直接的、自己的依赖项,例如数据库),这些内容位于单个模块或可以符号链接的文件中。然后,如果您想同时部署2个服务,只需将服务的两个模块/文件都包含在同一目录中,并对其运行Terraform即可。或者将它们完全分开,只需对多个目录多次运行Terraform。如果您需要更复杂的东西,那么您需要一个实际的编排工具,如Jenkins或其他CI工具等。