基础架构即代码(IaC)可自动配置基础架构,使您的组织能够以更快的速度、更低的风险和更低的成本开发、部署和扩展云应用程序。 什么是基础架构即代码(IaC)? 基础架构即代码(IaC)使用高级描述性编码语言来自动配置IT基础架构。 这种自动化消除了开发人员每次想要开发、测试或部署软件应用程序时手动配置和管理服务器、操作系统、数据库连接、存储和其他基础设施元素的需要。 在一个企业每天将数百个应用程序部署到生产环境中并不少见的时代当基础设施不断地旋转、拆除、扩大和缩小以响应开发人员和用户的需求时这对于组织来说至关重要自动化基础设施,以控制成本、降低风险并快速响应新的商机和竞争威胁。 IaC使这种自动化成为可能。 IaC也是必不可少的DevOps实践,对于具有竞争力的软件交付生命周期必不可少。 它使DevOps团队能够以与版本源代码相同的方式快速创建和版本基础设施并跟踪这些版本,以避免IT环境之间的不一致,从而在部署期间导致严重问题。 基础设施即代码的好处 配置传统IT是一个耗时且成本高昂的过程,需要专家人员进行硬件的物理设置、操作系统软件的安装和配置以及与中间件、网络、存储等的连接。 虚拟化和云原生开发消除了物理硬件管理的问题,使开发人员能够按需配置自己的虚拟服务器或容器。 但是,配置虚拟化基础设施仍然分散了开发人员对编码的关注,仍然需要他们为每个新部署重复配置工作,并且没有提供一种简单的方法来跟踪环境变化和防止影响部署的不一致。 基础架构即代码(IaC)是使开发人员能够通过执行脚本有效地订购完整记录的版本化基础架构的最后一步。 好处正是您可以想象的:加快生产上市时间:IaC自动化显着加快了为开发、测试和生产(以及根据需要扩展或关闭生产基础设施)配置基础设施的过程。 由于它对所有内容进行了编码和记录,因此IaC甚至可以自动配置遗留基础设施,否则这些基础设施可能会受到耗时过程(如拉票)的控制。 提高一致性减少配置漂移:当临时配置更改和更新导致开发、测试和部署环境不匹配时,就会发生配置漂移。 在开发需要满足严格的法规遵从标准的应用程序和服务时,这可能会导致部署问题、安全漏洞和风险。 IaC通过每次配置相同的环境来防止漂移。 更快、更高效的开发:通过简化配置和确保基础架构的一致性,IaC可以自信地加速软件交付生命周期的每个阶段。 开发人员可以快速配置沙箱和持续集成持续部署(CICD)环境。 QA可以快速提供全保真测试环境。 运营部门可以快速为安全和用户接受测试提供基础设施。 当代码通过测试时,可以一步部署应用程序和运行它的生产基础设施。 防止流失:为了在没有IaC的组织中最大限度地提高效率,通常会委派一些熟练的工程师或IT人员进行配置。 如果其中一位专家离开了组织,有时会留下其他人来重建流程。IaC确保供应智能始终保留在组织中。 降低成本并提高投资回报率:除了显着减少配置和扩展基础架构所需的时间、精力和专业技能外,IaC还允许组织最大限度地利用云计算基于消费的成本结构。 它还使开发人员能够花更少的时间在管道上,而将更多的时间用于开发创新的任务关键型软件解决方案。 不可变基础设施与可变基础设施 在使用基础架构即代码(IaC)自动化基础架构以及选择IaC解决方案时,需要做出的一个重要决定是建立可变基础架构还是不可变基础架构。 可变基础设施是在最初配置后可以修改或更新的基础设施。 可变基础架构使开发团队能够灵活地进行临时服务器定制,例如,更紧密地适应开发或应用程序需求或响应紧急安全问题。 但是,它也破坏了IaC的一个关键优势在部署之间或版本内保持一致性的能力并且会使基础设施版本跟踪变得更加困难。 由于这些原因,大多数IaC被实施为不可变的基础设施一旦最初提供就无法修改的基础设施。 如果需要更改不可变的基础设施,则必须用新的基础设施替换它。 因为新的基础设施可以在云上快速启动尤其是使用IaC不可变的基础设施比听起来更可行和实用。 不可变的基础设施将IaC带到了下一个合乎逻辑的步骤,从本质上强化了IaC以进一步确保它提供的好处。 这几乎消除了配置漂移,并使维护测试和部署环境之间的一致性变得更加容易。 它还可以更轻松地维护和跟踪基础架构版本,并在必要时自信地回滚到任何版本。 声明式与命令式方法 在选择IaC解决方案时,了解基础设施自动化的声明式或命令式方法之间的区别也很重要。 在大多数组织中,声明性方法(也称为功能性方法)是最合适的。 在声明式方法中,您指定要配置的基础架构的所需最终状态,而IaC软件处理其余部分启动虚拟机(VM)或容器,安装和配置必要的软件,解决系统和软件的相互依赖关系,和管理版本控制。 声明式方法的主要缺点是它通常需要熟练的管理员来设置和管理,而这些管理员通常专注于他们喜欢的解决方案。 在命令式方法(也称为程序方法)中,该解决方案可帮助您准备自动化脚本,一次为您的基础设施提供一个特定步骤。 虽然随着您的扩展,这可能需要更多的工作来管理,但现有的管理人员可以更容易理解并可以利用您已经拥有的配置脚本。 选择声明式或命令式方法类似于使用GPS或遵循转弯指示。 使用GPS,您输入一个地址,其余的工作由GPS完成,为您绘制最快的路线并避开交通但您可能需要专家告诉您它做出选择的原因。 转弯指示基于个人经验;提供者知道路线以及他她选择路线的原因,但如果您遇到障碍或想要优化路线,您必须寻求帮助或自己动手。 基础设施即代码工具 虽然有许多开源IaC工具可用,但最常用的工具是Ansible和Terraform: 什么是Ansible? Ansible是一个由RedHat赞助的开源社区项目,旨在帮助组织自动化供应、配置管理和应用程序部署。 Ansible是一种声明性自动化工具,可让您创建剧本(以YAML配置语言编写)来指定基础架构所需的状态,然后为您进行配置。 Ansible是自动配置Docker容器和Kubernetes部署的流行选择。 什么是Terraform? Terraform是另一种声明式供应和基础架构编排工具,可让工程师自动供应其企业基于云和本地基础架构的所有方面。 Terraform与所有领先的云提供商合作,让您可以并行地跨多个提供商自动构建资源,而不管物理服务器、DNS服务器或数据库位于何处。 它还可以提供以任何语言编写的应用程序。 与Ansible不同,Terraform不提供配置管理功能,但它与配置管理工具(例如CloudFormation)协同工作,以自动配置处于配置文件描述的状态的基础设施,并在必要时自动更改更新配置以响应到配置更改。