Terraform 与 CloudFormation:比较两种基础架构即代码产品 (2022)
已发表: 2022-04-10基础设施即代码 [IaC] 在过去几年中变得越来越流行,这也难怪为什么。 IaC,也称为软件定义的基础架构,是一种 IT 设置,开发人员或运营团队可以使用它来通过软件自动管理和提供应用程序的技术堆栈。
使用 IaC,无需使用手动流程来配置离散硬件设备和操作系统。 这也是DevOps的基础之一,可以提高工作的效率和质量。 在 AWS 上实施 IaC 最常用的两个工具是开源工具Terraform和CloudFormation 。
什么是 Terraform?
- Terraform 允许您在可以轻松共享、修改和重用的可读配置文件中定义本地和云资源。
- 它提供了一个持久、一致的工作流程来供应和管理您的所有基础设施。
- Terraform 可以管理低级组件,例如:
- 计算
- 网络资源
- 贮存
Terraform 是如何工作的?
- Terraform 可以通过其在云平台和各种服务上的应用程序编程接口 (API) 创建和管理资源。
- 提供者使其能够通过可访问的 API 与几乎任何平台或服务一起工作。
- Terraform 社区与 1700 多家供应商合作,管理着数千种服务和资源,公司还在不断扩展。
- 您可以在Terraform Registry上找到所有公开可用的提供程序:
- 亚马逊网络服务 (AWS)
- Azure、谷歌云平台(GCP)
- Kubernetes
- 头盔
- GitHub
- 斯普朗克
- 数据狗
核心 Terraform 工作流程包含三个阶段:
- 编写:定义可以通过多个云服务和提供商运行的资源。
- 计划: Terraform 将编译一个执行计划,概述它将根据现有基础设施和您的配置创建、更新或销毁的基础设施。
- 应用:一旦获得批准,Terraform 将按照正确的顺序执行所有建议的操作,并考虑任何资源依赖关系。
为什么选择 Terraform?
- 管理任何基础设施
Terraform 对基础设施采取了不可磨灭的方法,以降低修改或更新基础设施和服务的复杂性。 它还在状态文件中跟踪您的真实基础设施。 该文件将确定需要对您的基础架构进行的所有必要更改,使其与您的配置文件保持一致。 这些文件描述了您的基础设施的最终状态。 由于 Terraform 控制底层逻辑,因此您无需编写详细说明来创建资源。 它将构建一个资源图来规范资源依赖关系。 它将创建或修改非依赖资源,帮助您轻松跟踪所有资源。
- 标准化配置
Terraform 非常高效,因为它支持模块或可重用的配置组件。 模块提供了一种轻松的方式来打包和重用代码,并且等效于编程或脚本语言中的方法或功能。 模块被认为是标准接口,因为它们通过分配输入和返回输出来创建资源。 通过提高可读性并允许团队利用逻辑块来组织基础设施,这大大简化了项目。
模块的另一个好处是它们可以轻松地获取并共享到任何 Terraform 项目中。 模块通常用作管理和创建多个资源的接口。 这显着减少了项目中重复代码的数量,但是在仅更改选择参数的同时复制和粘贴代码部分可能是单调的。 通过使用输入变量,您可以自定义模块的行为,并可能自定义它如何标记资源。 Terraform 模块也可以返回输出,这些输出可以作为不同模块或资源的输入。
在运行任何规模的基础架构时,无疑会有大量的组件和配置。 这可能会很棘手,因为组织内不同团队使用的基础架构中有很多细微的变化。 这会使事情变得更加复杂,因为基础设施可能跨越从内部部署到众多云供应商的各种拓扑结构。 因此,组织和维护基础设施是一个复杂的过程。
什么是 AWS CloudFormation?
AWS CloudFormation 为企业和开发人员提供了一种创建各种相关 AWS 和其他资源的简单方法。 开发人员可以直接、声明式的方式安装和更新数据库、计算和各种其他资源,消除指定特定资源 API 的挑战。 Cloudformation 还定期、可预测且安全地管理资源生命周期。 它还允许自动回滚、自动状态管理以及所有帐户和区域的资源管理。
CloudFormation 让您可以将更多时间用于在 AWS 中运行的应用程序,而减少管理资源的时间。 您可以设计一个模板来定义您想要的所有 AWS 资源,包括 Amazon EC2 实例或 Amazon RDS 数据库实例等。CloudFormation 将负责预置和配置您的资源。 它还处理创建和配置 AWS 资源,并计算出所有依赖物流。
为什么选择 CloudFormation?
- 简化基础设施管理
要构建包含后端数据库的可扩展 Web 应用程序,您可以使用 Amazon 关系数据库、服务数据库实例或 Auto Scaling 组。 在使用您选择的服务创建资源后,您必须将它们配置为协作。 这些额外的步骤可能会使您的应用程序启动的过程变得复杂并减慢速度。 CloudFormation 允许您创建模板或修改现有模板。 模板定义了您的所有资源及其所有组件。
使用该模板创建 CloudFormation 堆栈将允许服务完全控制 Auto Scaling 组、负载均衡器和数据库。 成功创建堆栈后,您的 AWS 资源将完全正常运行。 删除堆栈很简单,但请记住,删除堆栈意味着删除它所拥有的所有资源。 总而言之,CloudFormation 使管理单个单元中的资源集合成为一种轻松的体验。
- 快速复制您的基础架构
如果您的应用程序需要额外的可用性,您可能会在多个区域复制它,这样如果一个区域不可用,人们仍然可以在其他地方使用您的应用程序。 这说起来容易做起来难。 复制您的应用程序可能具有挑战性,因为它还需要您复制资源。 您必须记录应用程序所需的每个资源,同时在每个区域中管理和配置这些资源。
CloudFormation 模板非常棒,因为您可以重复使用它们来一致且重复地创建资源。 为此,您必须定义一次资源,然后在多个区域连续供应这些资源。 CloudFormation 不断适应,最近的更新和新选项使得有多种方法来创建资源成为可能。 其中包括利用 AWS CDK 以高级语言进行编码、检测配置偏差以及导入现有资源。 现在有一个注册表,可以方便地创建具有 Cloudformation 的许多核心优势的自定义类型。
CloudFormation 四个主要概念
- 模板是 JSON 或 YAML 格式的文本文件,用于描述成功运行应用程序所需的所有资源的预期状态。 它们由以下部分组成:
- 模板参数的可选列表(在堆栈创建时提供的输入值)
- 输出值的可选列表(例如,Web 应用程序的完整 URL)
- 可选的数据表列表用于查找静态配置值(例如,AMI 名称)。
- AWS 资源列表及其配置值
2.模板文件格式版本号
3. 堆栈强制执行和管理模板中的所有资源,允许一起管理这些资源的状态和依赖关系。
4. 变更集是堆栈操作为创建、更新或删除资源而执行的所有更新的预览。
5. 堆栈集是您同时管理的一组堆栈,可以复制一个组。