基础设施即代码(Infrastructure as Code,IaC),指的是通过代码而不是手动流程来管理和配置基础设施,有时被称为“可编程基础设施”,基础设施配置完全可以当做软件编程来进行。不过,这里提到的“代码”并不是软件开发过程中通常意义上的代码,不一定能够编译为可执行文件,而且,通常情况下的意义是,把这些清单文件当做代码来管理。
基础设置即代码的部分优势如下。
①一致性:体现为基础设施的安装和配置过程有单一来源,通常是一个Git仓库,这就避免了在人工操作过程中潜在的错误、遗漏。
②可追溯:所有基础设施的配置变更、升级(或降级)等都可以通过清单文件的变更记录看到,而分布式的版本管理工具Git让我们可以轻松做到,方便地查看某个变更的发起人、时间,甚至可以快速地回退、变更。
③可复用:由于基础设施的安装、配置信息已经记录在文本文件中了,因而可以方便地把相同(或相似)的系统在其他环境中再次实施。
基础设施即代码主要是将基础设施的安装、配置以声明式文本的形式记录到代码仓库(以Git居多)中,通过一个中间件或系统,按照既定规则,将基础设施软件安装并配置为期望的状态。
HashiCorp的Terraform是一种基础设施即代码的工具(如图4-1所示),允许以可读的配置文件定义云资源和本地资源,而且支持版本管理、复用和分享。
图4-1 Terraform
下面是Terraform的一段示例代码: