什么是基础结构即代码 (IaC)?

基础结构即代码 (IaC) 使用带描述性模型的 DevOps 方法和版本控制来定义和部署基础结构,例如网络、虚拟机、负载均衡器和连接拓扑。 与相同源代码始终会生成相同二进制文件的原则相似,每次 IaC 模型部署时都会生成相同的环境。

Diagram of infrastructure as code defining the environment in a versioned file.

IaC 是一项关键的 DevOps 实践,也是持续交付的其中一个组成部分。 借助 IaC,DevOps 团队可使用一组统一的实践和工具协同工作,从而快速、可靠地大规模交付应用程序及其底层基础结构。

避免手动配置以强制实施一致性

IaC 旨在解决发布管道中的环境偏移问题。 如果没有 IaC,团队必须维护各个部署环境设置。 随着时间推移,每个环境都会变成一片“雪花”,这是一种无法自动重现的唯一配置。 环境之间的不一致可能会导致部署问题。 基础设施管理和维护涉及容易出错且难以跟踪的手动流程。

IaC 通过格式良好的代码(如 JSON)来表示所需的环境状态,从而避免手动配置并强制实现一致性。 采用 IaC 的基础结构部署是可重复的,可以防止因配置偏移或缺少依赖项而导致的运行时问题。 发布管道会执行环境说明和版本配置模型来配置目标环境。 若要进行更改,团队需编辑源,而不是目标。

幂等性是一项重要的 IaC 原则,它是指给定操作始终能产生相同结果的能力。 无论环境的初始状态如何,部署命令始终会将目标环境设置为同一配置。 幂等性会通过自动配置现有目标或放弃现有目标并重新创建新环境来实现。

有用的工具

大规模交付稳定的测试环境

IaC 可帮助 DevOps 团队在开发周期的早期在类似生产的环境中测试应用程序。 团队可按需可靠地预配多个测试环境。 云会根据 IaC 定义动态地预配和拆除环境。 可验证和测试基础结构代码自身,以防止出现常见部署问题。

使用声明性定义文件

如果可能,IaC 应使用声明性定义文件。 定义文件描述了环境所需的组件和配置,但不一定会描述如何实现该配置。 例如,该文件可能定义了所需的服务器版本和配置,但未指定服务器安装和配置流程。 凭借这种抽象,可更灵活地使用基础结构提供程序提供的优化后的技术。 声明性定义还有助于减少维护命令性代码(如部署脚本,此类代码可能会随时间推移而累积)的技术债务。

声明性 IaC 没有标准语法。 用于描述 IaC 的语法通常取决于目标平台的要求。 不同的平台支持不同的文件格式,例如 YAML、JSON 和 XML。

在 Azure 上部署 IaC

Azure 通过 Azure 资源管理器模型为 IaC 提供本机支持。 团队可定义声明性 ARMBicep 模板,而这些模板可指定部署解决方案所需的基础结构。

第三方平台(如 TerraformAnsibleChefPulumi)还支持 IaC 来管理自动化基础结构。