基础结构即代码 (IaC) 通过描述性模型使用 DevOps 方法和版本控制来定义和部署基础结构,例如网络、虚拟机、负载均衡器和连接拓扑。 正如同一源代码始终生成相同的二进制文件一样,IaC 模型每次部署时都会生成相同的环境。
IaC 是一项关键的 DevOps 实践和 持续交付的组件。 借助 IaC,DevOps 团队可以与一组统一的做法和工具协作,以快速可靠地大规模交付应用程序及其支持基础结构。
避免手动配置以强制实施一致性
IaC 演变为解决发布管道中的 环境偏移 问题。 如果没有 IaC,团队必须单独维护部署环境设置。 随着时间的推移,每个环境都会成为“雪花”,这是无法自动重现的唯一配置。 环境之间的不一致可能会导致部署问题。 基础结构管理和维护涉及容易出错且难以跟踪的手动过程。
IaC 通过格式良好的代码(如 JSON)来表示所需的环境状态,从而避免手动配置并强制实施一致性。 使用 IaC 的基础结构部署是可重复的,并防止因配置偏移或缺少依赖项而导致的运行时问题。 发布管道执行环境说明和版本配置模型来配置目标环境。 若要进行更改,团队会编辑源而不是编辑目标。
幂等性是给定作始终产生相同结果的能力,是重要的 IaC 原则。 无论环境的启动状态如何,部署命令始终将目标环境设置为同一配置。 通过自动配置现有目标或放弃现有目标并重新创建新环境来实现幂等性。
有用的工具
大规模交付稳定的测试环境
IaC 可帮助 DevOps 团队在开发周期早期在类似生产的环境中测试应用程序。 Teams 可以按需可靠地配置多个测试环境。 云根据 IaC 定义动态配置和销毁环境。 可以验证和测试基础结构代码本身,以防止常见的部署问题。
使用声明性定义文件
如果可能,IaC 应使用声明性定义文件。 定义文件描述环境所需的组件和配置,但不一定如何实现该配置。 例如,该文件可能定义所需的服务器版本和配置,但不指定服务器安装和配置过程。 这种抽象允许更灵活地使用基础结构提供程序提供的优化技术。 声明性定义还有助于减少维护命令性代码(如部署脚本)的技术债务,这些代码可能会随时间推移而累积。
声明性 IaC 没有标准语法。 描述 IaC 的语法通常取决于目标平台的要求。 不同的平台支持文件格式,例如 YAML、JSON 和 XML。
在 Azure 上部署 IaC
Azure 通过 Azure 资源管理器 模型为 IaC 提供本机支持。 Teams 可以使用 JSON 语法或 Bicep 来定义声明性 ARM 模板,以指定部署解决方案所需的基础结构。 还可以通过特定的 Azure 提供程序来使用第三方解决方案,比如 Terraform。