65.9K
CodeProject 正在变化。 阅读更多。
Home

基础设施即代码简介(第一部分):IaC 简介

2022 年 6 月 9 日

CPOL

6分钟阅读

viewsIcon

5392

IaC 简介。

近年来,开发已从单体应用程序转向微服务架构和云原生应用程序。然而,现代化应用程序会引入复杂性,因为维护云计算架构需要基础设施自动化工具、高效的配置和新资源的扩展。

太多开发人员仍然认为基础设施配置和管理是一个不透明的过程,由运维团队使用 Azure Portal 等 GUI 工具来完成。基础设施即代码 (IaC) 挑战了这种观念。IaC 的实践统一了开发和运维,在代码和基础设施之间建立了紧密的联系。

为什么我们应该使用 IaC?当您开发应用程序时,您会创建代码、构建和版本化代码,并通过 DevOps 管道部署工件。IaC 允许您使用代码在云中创建基础设施,使您能够根据需要对该代码进行版本化和执行。

这个包含三篇文章的系列从介绍 IaC 开始。然后,本系列接下来的两篇文章将展示 如何使用 Bicep 语言和 Terraform HCL 语法创建模板,以及 在 Azure 上自动配置资源

IaC 的历史

我们可以将服务器管理的历史分为两个时期:IaC 之前和 IaC 之后。

在 IaC 之前,IT 专业人员必须使用基于 Web 的门户和命令行工具来配置物理服务器基础设施,这需要开发人员花费时间进行手动任务。

然后出现了虚拟机 (VM)。随着虚拟化的出现,“裸金属”服务器不再限制工程师,他们开始受益于在 VM 中分配空间的优势。脚本的使用促进了基础设施的管理。

然而,由于他们仍然手动执行脚本,工程师仍然可以创建理论上与生产环境相同的测试环境。实际上,由于人为错误,它们包含不一致的资源和不同的配置。

最终,随着云计算时代的到来,IaC 解决了这些问题,并成为 DevOps 最佳实践的组成部分。IaC 技术,如 ARM 模板、CloudFormation、Terraform 和 Pulumi,通过机器可读的定义文件带来了声明式配置,使得基础设施自动化成为可能。这带来了许多好处,例如可预测、一致的基础设施部署结果、减轻人为错误、降低成本和风险,以及定义文件的版本控制。

流行的 IaC 工具

让我们来看一些专为 IaC 设计的框架和语言。虽然 IaC 模板通常可以完成相同的任务,但我们可以将它们分为专为特定云供应商设计的模板和被设计为平台无关语言的模板。

一些 IaC 模板与特定供应商的云供应商(如 Microsoft Azure、Amazon AWS 和 Google Cloud)配合使用。这些主要的云供应商旨在创建完整的生态系统,每个供应商都有自己的 IaC 解决方案。这些专有技术通常支持更通用的配置格式,如 JSON,以及另一种可以是特定领域语言 (DSL) 的格式,旨在为自动化资源配置提供更多的通用性和效率。

Microsoft Azure

在 Microsoft Azure 中,我们可以使用 Azure Resource Manager 模板,也称为 ARM 模板,它们是包含我们要创建的资源的配置的 JSON 类型文件。或者,我们可以使用 Bicep 语言,该语言建立在 JSON ARM 模板之上以取代它们,是 Azure 中进行 IaC 的首选方式。

AWS CloudFormation

AWS CloudFormation 是 AWS 云的标准 IaC 服务。AWS CloudFormation 模板支持 JSON 和 YAML 格式,并与称为堆栈的单元一起工作。堆栈是在 AWS CloudFormation 中创建的 AWS 资源集合,然后部署到 AWS 并作为单个单元进行管理。

Google Cloud Deployment Manager

Google Cloud Deployment Manager 是用于自动化创建和管理 Google Cloud 资源的 IaC 服务。Google Cloud Deployment Manager 模板支持 YAML、Jinja 和 Python。

无论云平台如何,供应商特定的 IaC 解决方案通常都支持通用的配置或模板语言,如 JSON 和 YAML,以及另一种更强大的语言,如 Python、Bicep 或 HashiCorp Configuration Language (HCL)。这是因为开发人员通常认为 JSON,加上所有那些括号、双引号和逗号,对于用作模板语言来说过于冗长,并且对于大型部署来说不够人类可读。虽然 YAML 比 JSON 更简洁,但它存在对空格敏感的问题,如果您不使用对 YAML 友好的编辑器,则很难在代码中发现和修复错误。

Microsoft 等云供应商后来为其 IaC 解决方案引入了更多语言选项。例如,我们可以使用 Bicep 语言编写 Azure Resource Manager 模板,该语言易于阅读和编写,并附带 Visual Studio Code 的代码编辑器扩展,支持语法检查并具有自动完成功能。Bicep 模板语法支持强大的功能,包括数据类型、参数、变量、子资源、模块、输出、循环和条件。

Bicep 是对 JSON 模板的重大改进,因为它能跟上每一次升级或新添加的资源。Azure Resource Manager 的每个新资源发布都已在 Bicep 语法中可用。

然后,还有像 TerraformPulumi 这样的多供应商工具,它们是 GitHub 上可用的开源 IaC 工具。Terraform 和 Pulumi 支持包括 Azure 在内的多个云供应商。多供应商技术对解决方案开发人员很有吸引力,因为他们在与其他云合作时不必处理不同的配置语言。

从一开始,Terraform 就提供了 HCL,而 Pulumi 最初使用通用编程语言和 YAML。最近,除了 HCL 之外,Terraform 还增加了对 Python、TypeScript、JavaScript、Go、C# 和 Java 等流行语言的支持。

从 JSON 模板转向 Azure 的 Bicep 语言对于开发人员来说已经是一个受欢迎的改进。此外,Terraform 和 Pulumi 为 IaC 提供的广泛语言支持使开发人员能够利用他们的编程知识来创建自动化的基础设施配置。

软件开发变得越来越复杂,不难发现拥有大型项目并选择同时使用不同云提供商的组织。像 Pulumi 和 Terraform 这样的供应商无关工具是那些在如此多样化的生态系统中工作的 DevOps 专业人员所广泛接受的替代方案。

结论

通过云平台门户管理资源可能是一项繁琐且容易出错的活动,无论这些 Web 平台的图形界面多么现代和功能强大。

IaC 是一种过程,它将配置提升到应用程序和其他软件工件源代码所享有的同等关注级别。IaC 以通过云平台门户无法实现的方式,极大地简化了自动化、持续改进和持续开发管道、快速交付、版本控制、文档、审计和安全性。

现在我们已经讨论了 IaC 是什么、它的历史以及一些流行的 IaC 工具,让我们在本文系列的第二篇文章中探讨如何创建基于 Bicep 语言配置资源的声明。

要了解更多关于如何使用 Bicep 定义 Azure 网络资源的信息,请参阅资源使用 Bicep 创建虚拟网络资源

© . All rights reserved.