基础设施即代码(IAC)是一种通过源代码来定义计算和网络基础设施的方法,可以将它作为一个软件系统对待。这些代码可以放在一个源码管理系统以便于审计、可复现,满足测试实践以及CD的原则。随着云计算的兴起,它已经被使用了许多年,并且今后将继续成为处理云基础设施的主要方法。
云计算到来之前,要发布一个新的应用需要购买硬件资源、按需配置然后部署应用到硬件上。这一系列的步骤需要花费大量的时间。但云计算到来后,这些步骤可以在分钟内完成,只是需要一个网络连接和一个信用卡(付费的)。
实践
IAC的一些实践:
- 使用定义的文件:所有的配置定义在可执行的配置文件中,比如shell脚本,ansilbe playbooks,Chef recipes, 或者 Puppet manifests。任何时候任何人都不应该登陆主机,然后做一个变更。任何这样的修修补补都有风险,因此,只有在开发作为持久定义的代码时才应该这样做。这意味着使用代码来做更新应该很快。幸运的是计算机执行代码很快,特别是要更新成百上千台机器的时候。
- 自记录的系统和过程:与记录文档的一些指令相比,代码执行更加准确和一致,而不会出现不同的人看文档有不同的理解。如果有必要,可读性的文档可以从代码中产生。
- 把所有的东西都版本化: 使用源码控制来保存代码。这样每一个配置和变更都会被记录下来,而且出问题也可以帮助诊断。
- 持续的测试系统和过程: 测试可以让计算机快速发现配置中的问题。现代软件系统,可以为IAC设置 DeploymentPipelines ,以便于为IAC进行 ContinuousDelivery
- 小的改变而不是批量: 代码更新越大,更可能包含错误,而且更不容易发现错误。小的变更更容易发现错误和修复错误。当修改代码时遵循FrequencyReducesDifficulty.
- 保持服务一直可用: 越来越多的系统无法承受停机来进行升级或修复。 BlueGreenDeployment 和ParallelChange 可以用来进行不停服升级