什么是基础设施即代码?自动化你的基础设施构建

137 阅读6分钟

什么是基础设施即代码?自动化你的基础设施建设

将计算基础设施视为代码是在云中配置软件的智能和现代方式,以下是它是什么以及为什么它更好:

随着越来越多的企业转向云计算,知道如何配置物理服务器的技能与现代软件的构建和部署方式越来越不相关。

在今天这个复杂的、由软件驱动的世界里,计算基础设施往往既看不见也听不见,能够使用声明性代码而不是手动配置甚至脚本来配置和管理该基础设施,对于以网络规模运行应用程序是必不可少的

基础设施即代码的简史

虽然系统管理员自20世纪90年代以来一直在使用脚本来管理他们的基础设施,但将基础设施视为代码(IaC)的做法直到2000年代末才完全凝聚起来,当时devops先驱Andrew Clay-Shafer、Chef联合创始人Adam Jacob和Puppet创始人Luke Kanies等工程师开始使用这一术语。

在一个分布式应用的世界里,手工调整服务器永远不会有规模,而脚本也有其自身的局限性,所以能够自动配置基础设施成为云计算早期许多先行者的核心需求。

今天,由于Chef、Puppet、SaltStack和Ansible等早期流行的工具,底层基础设施更普遍地以代码的形式进行配置。但是,技术发展很快,从那时起,一切都在进步。在这里,我们将解释基础设施即代码的基本原理,以及为什么它是当今现代软件开发实践的基石。

基础设施即代码的定义

在《 基础设施即代码。云时代的动态系统 》中 ,Kief Morris解释说,基础设施即代码可归结为三个核心实践。"把一切都定义为代码,在工作中不断测试和交付一切,并从小的、松散耦合的部分建立你的系统"。

在工作定义方面,莫里斯提出,IaC "是一种基于软件开发实践的基础设施自动化方法。它强调一致的、可重复的程序,用于配置和改变系统及其配置"。

在实践中,这通常看到devops团队使用JSON或YAML等记录良好的语言对环境描述和配置模型的版本进行修改。一旦该环境被配置好,就可以对源头而不是目标进行更改,这样就可以在更大的范围内对基础设施进行更安全、更有规律的更改。

基础设施即代码和devops的结合点

作为自动化初始配置和后续更改的一种方式,基础设施即代码是现代devops实践的一个关键部分,开发人员和操作人员被期望携手合作,更快、更频繁地部署软件。通过自动化和版本化基础设施的构建,IaC工具可以帮助应用程序开发人员解放出来,专注于他们最擅长的工作,并将系统管理员从手工过程中解放出来。

使用代码来配置和维护基础设施,有助于在软件开发生命周期的早期将开发人员和运营专家更紧密地联系在一起,并有助于在运营中灌输软件开发的纪律性、明确性和可重复性。随着自动化和协作成为devops实践的关键原则,IaC工具也成为该团队有效合作的核心枢纽。

基础设施作为代码的好处

将基础设施作为代码处理的主要好处在于摆脱人工流程的转变,以及自动化为开发团队提供的自由。这带来了一定程度的成本节约,也可以提高这些团队安全交付应用程序变化的速度。

正如Simple Thread联合创始人Justin Etheredge在2020年的一篇博文中写道:"基础设施即代码让你可以自由地进行修改,而不用担心你会把事情放在一个无法恢复的状态。而且它让你更好地了解环境是如何形成的,这让你更有信心做出你需要的改变。"

在他的书中,Morris概述了IaC相对于传统配置方法的七个关键好处。这些优点是:

  • 将IT基础设施作为快速交付价值的助推器
  • 减少对基础设施进行修改的努力和风险
  • 使基础设施的用户能够在他们需要的时候获得他们需要的资源
  • 在开发、运营和相关职能部门之间提供通用工具
  • 创建可靠、安全和具有成本效益的系统
  • 使治理、安全和合规性控制可见
  • 提高排查和解决故障的速度

基础设施即代码 "工具

实施基础设施即代码所需的工具往往分为两个阵营:配置协调和配置管理。

最流行的协调工具是AWS CloudFormation、Google Cloud Deployment Manager、HashiCorp Terraform、Microsoft Azure Resource Manager和Pulumi,它们都可以让开发者自动部署基础设施。

在配置管理方面,Ansible、Chef、Puppet和SaltStack等第三方工具仍然是配置、存储和自动构建虚拟服务器环境的流行方式,而许多开发人员使用Docker来制作他们的容器镜像。

这些工具中的许多都可以串联使用,因为Ansible、Chef、Puppet和SaltStack等工具专注于管理已经存在的基础设施上的配置,而Terraform等配置工具则将该基础设施层抽象出来。

开始使用基础设施即代码

采用基础设施即代码通常是更广泛的组织向云和devops实践转变的一部分。虽然这种转变听起来很吓人,但实施基础设施即代码是使你构建和运行软件的方法现代化的关键。

"埃瑟里奇警告说:"有时候,用基础设施即代码进行修改可能需要更长的时间,"但这是你需要放慢速度来加速的情况之一。勤奋地通过你的脚本进行修改,无疑会在停电或排除故障时为你节省无数时间。而且你会对你的改动更有信心,因为你可以在测试环境中测试这个改动,而不是在生产环境中祈祷,直接运行更新。即使在小环境中,回报也是巨大的。"

或者,正如莫里斯所写的,"自动化你的基础设施需要工作,特别是当你在学习如何做的时候。但做它有助于你做出改变,包括首先建立系统"。