基础架构即代码允许开发人员生成他们需要的任何基础架构组件,包括网络、负载平衡器、数据库、虚拟机和连接类型。
使用很少或没有文档
在配置文件中定义规格和参数。不需要与正在使用的配置不同步的其他文档。
版本控制所有配置文件
将所有配置文件置于源代码管理之下。版本控制在管理基础架构时提供了灵活性和透明度。它还允许您跟踪、管理和恢复以前的清单。
不断测试配置
在将任何更改推送到生产环境之前测试和监控环境。为了节省时间,请考虑设置 在配置代码被修改时运行的自动化测试。
模块化
将您的基础架构划分为多个组件,然后通过自动化将它们组合起来。IaC 分段提供了许多优点。您可以控制谁可以访问您的代码的某些部分。您还可以限制可以对清单进行的更改的数量。
基础设施即代码工具
IaC 工具可加速和自动化云环境的配置。大多数工具还监视先前创建的系统并回滚对代码的更改。
虽然它们在功能方面有所不同,但有两种主要类型的基础设施即代码工具:
- 命令式工具
- 声明性工具
命令式方法工具
具有命令式方法的工具定义了使基础架构能够达到所需状态的命令。工程师创建脚本,一次一步配置基础设施。由用户决定最佳的部署过程。
命令式方法也称为程序方法。
与声明式方法工具相比,命令式 IaC 需要更多的手动工作。需要执行更多任务才能使脚本保持最新。
命令式工具更适合具有脚本背景的系统管理员。
const aws = require("@pulumi/aws");
let size = "t2.micro";
let ami = "ami-0ff8a91507f77f867"
let group = new aws.ec2.SecurityGroup("webserver-secgrp", {
ingress: [
{protocol: "tcp", fromPort: 22, toPort: 22, cidrBlocks: ["0.0.0.0/0"] },
],
});
let server = new aws.ec2.Instance("webserver-www", {
instanceType: size,
securityGroups: [ group.name ],
ami: ami,
});
exports.publicIp = server.publicIp;
exports.publicHostName= server.publicDns;
命令式 IaC 示例(使用 Pulumi)
声明式方法工具
声明性方法描述了基础设施的期望状态,而不列出达到该状态的步骤。IaC 工具处理需求,然后自动配置必要的软件。
虽然不需要分步说明,但声明式方法需要熟练的管理员来设置和管理环境。
声明式工具面向具有强大编程经验的用户。
resource "aws_instance" "myEC2" {
ami = "ami-0ff8a91507f77f867"
instance_type = "t2.micro"
security_groups = ["sg-1234567"]
}
声明性基础设施即代码示例(使用 Terraform)
流行的 IaC 工具
市场上使用最广泛的基础设施即代码工具包括:
- Terraform: 这个开源声明性工具提供了预先编写的模块,您可以使用参数填充这些模块以构建和管理基础设施。
- Pulumi:Pulumi 的主要优势在于用户可以依靠自己喜欢的语言来描述所需的基础设施。
- Puppet: 使用 Puppet 的基于 Ruby 的 DSL,您可以定义所需的基础设施状态,该工具会自动创建环境。
- Ansible: Ansible 使您能够通过描述组件和系统如何相互关联来对基础架构进行建模。
- Chef: Chef 是市场上最受欢迎的命令式工具。Chef 允许用户使用其基于 Ruby 的 DSL 制作“食谱”和“食谱”。这些文件指定了实现所需环境所需的确切步骤。
- SaltStack: SaltStack 的不同之处在于配置和配置基础设施组件的简单性。