问题描述
在一个拥有许多部门的市政府中,各个部门的团队会提出针对特定用途/应用程序的新服务器请求。目前,我们的环境使用 VMware VSphere(约1500台虚拟机,2个数据中心,50个主机/刀片),并计划在未来几年逐步迁移到 Azure。
作为一个刚刚开始使用 Terraform 的人,我能够逐个构建虚拟机。我应该为每个服务器创建一个独立的 Terraform 项目吗?或者有没有必要对它们进行某种形式的分组?大多数请求一次只需要一个或两个服务器,有时最多四个。每个请求通常与之前的请求无关。
是否有关于在这个规模上组织的理论的资料?或者我应该接受我们必须维护1500套 Terraform 项目文件的现实?
解决方案
基于Terraform模块的组织
当面临大量不相关的服务器项目时,合理的组织方式能够显著减轻管理负担。以下是一些建议来组织您的基础设施即代码(IaC)项目:
使用Terraform模块:Terraform的模块化设计使您能够创建可重用的组件,这些组件可以在不同的项目中使用。对于不同类型的服务器,您可以创建不同的Terraform模块,每个模块负责一个特定的功能或配置。这样一来,您可以在每次新的服务器请求时,使用适当的模块,而无需从头开始编写项目文件。
按功能分组:考虑将服务器按照功能、用途或类别进行分组。每个功能或用途可以对应一个Terraform模块。例如,如果有多个部门需要Web服务器,您可以为Web服务器创建一个通用模块,而不是为每个部门单独创建项目。
使用变量和配置文件:将通用配置信息抽象到变量和配置文件中。这样,您可以根据需要修改这些配置,而无需修改每个项目文件。这也使得在服务器数量增加时,管理配置变得更加容易。
版本控制和CI/CD:为每个Terraform项目使用版本控制系统(如Git)。这样可以轻松地跟踪项目的更改并进行协作。同时,使用持续集成/持续交付(CI/CD)流程自动化部署和更新服务器,确保代码的可靠性和一致性。
使用Terragrunt
虽然 Terragrunt 在某些方面能够帮助解决问题,但在 Azure 环境下尚不可用。如果您的环境将来支持 Terragrunt,可以考虑使用它来简化对大量基础设施项目的管理。
总结
在处理大量不相关的基础设施即代码项目时,合理的组织方式至关重要。使用 Terraform 模块、按功能分组、使用变量和配置文件以及使用版本控制和 CI/CD 流程都是有效的管理策略。如果未来您的环境支持,Terragrunt 也可以成为简化管理的有用工具。通过合理的组织和设计,您可以更轻松地管理和维护您的服务器项目,实现更高效的基础设施管理。
请注意,以上方案是根据您的问题描述和现有回复提供的建议。在实施之前,请务必考虑您的实际情况和需求,并根据需要进行适当的调整和优化。