Terraform 系列-Terraform 简介

terraform,系列,简介 · 浏览次数 : 236

小编点评

**Terraform 系列文章前言** **概述** Terraform 是一个基础架构即代码 (IaC) 工具,可帮助您安全高效地构建、更改云和本地资源并对其进行版本控制。 **基础设施即代码 (IaC)** IaC 是指基础设施即代码的缩写,它是描述基础设施的代码。 Terraform 使用高级配置语法来描述基础设施的蓝图,使其可版本控制。 **工作空间 (Workspace)** 工作空间用于存储相同配置代码的多个状态文件。 **变量 (Variable)** 变量是用户提供的值,它们可用于参数化 Terraform 模块。 **运行 (Run)-计划和应用 (Plan & Apply)** Terraform 有一个“计划”步骤,它可以生成执行计划。执行计划显示了 Terraform 在您调用 apply 时将执行的操作。 **资源图 (Resource Map)** 资源图显示了所有资源的图,并并行化任何非依赖资源的创建和修改。 **变更自动化** 变更自动化可以以最少的人工交互应用于您的基础架构。 **功能** Terraform 提供以下特性: * 支持条件语句 * 支持 for 循环 * 支持多种类型的数据类型 * 模块化等待条件模板 * 动态块 * 变量 *内置函数 **优缺点** 相比其他 IaC 工,Terraform 的优势包括: * 云无关 * 支持多个提供商和服务的组合和组合 * 使用执行计划的概念将计划阶段与执行阶段分开 **与其他 IaC 工比较** 与 Ansible/Chef/Puppet/SaltStack 等配置管理工具相比,Terraform 更易于使用,因为它是一种声明式的工具。

正文

系列文章

👉 Terraform 系列文章

前言

最近在使用 Terraform 来置备 OCI 的 Always Free Tier, 发现它非常好用。总结学习下:Terraform 的基础知识。

什么是 Terraform?

Terraform 是一种基础架构即代码(IaC)工具,可让您安全高效地构建、更改云和本地资源并对其进行版本控制

HashiCorp Terraform 是一种基础架构即代码工具,可让您在人类可读的配置文件中定义云和本地资源,您可以对这些文件进行版本控制、重用和共享。然后,您可以使用一致的工作流程在其整个生命周期内配置和管理所有基础设施。Terraform 可以管理计算、存储和网络资源等低级组件,以及 DNS 条目和 SaaS 功能等高级组件。

Terraform 的主要特点

  • 基础设施即代码(IaC):基础设施使用高级配置语法进行描述。这允许对数据中心的蓝图进行版本控制,并像对待任何其他代码一样对待它。此外,基础设施可以共享和重复使用。

  • 执行计划(Plan):Terraform 有一个“计划”步骤,它可以生成执行计划。执行计划显示了 Terraform 在您调用 apply 时将执行的操作。这可以让您在 Terraform 操作基础设施时避免任何意外。

  • 资源图(Resource Map):Terraform 构建所有资源的图,并并行化任何非依赖资源的创建和修改。正因为如此,Terraform 尽可能高效地构建基础设施,并且运营商可以深入了解其基础设施中的依赖关系。

  • 变更自动化:复杂的变更集可以以最少的人工交互应用于您的基础架构。有了前面提到的执行计划和资源图,您就可以确切地知道 Terraform 将更改什么以及更改的顺序,从而避免许多可能的人为错误。

Terraform 的功能

这里简单罗列一下,由于笔者水平所限,可能有遗漏,请帮忙补充:

  • IaC
  • 工作空间(WorkSpace): Workspace 允许相同的配置代码有一个以上的状态 (State) 文件。这意味着部署到多个环境时,不需要将配置代码复制粘贴到不同的文件夹。每个工作空间可以使用自己的变量定义文件来参数化环境。
  • 变量(Variable): 即用户提供的值,它们能够参数化 Terraform 模块 (modules), 而不必修改源代码。
  • 运行(Run)-计划和应用(Plan & Apply)
  • 资源图
  • 供应商(Provider): Provider 是上游 API 的逻辑抽象。他们负责了解 API 交互和公开资源。如:AWS/Azure/GCP/Kubernetes/Aliyun/OCI Providers
  • 模块(Modules): 模块是 Terraform 配置的独立包,允许把相关资源组合到一起,创建出可复用的组件。要使用模块,你并不需要知道模块的工作方式,只需要知道如何设置输入和输出即可。对于提升软件抽象度和代码复用,模块是很有用的工具。类似于积木块或 Python 的 library.
  • 注册表(Registry): 发现为所有 Terraform 资源类型提供支持的 Terraform 提供程序,或查找用于快速部署通用基础结构配置的模块。类似于 Docker Registry 或 Python PypI.
  • 声明式编程: 表达计算逻辑(做什么), 但不描述控制流(怎么做). 其关注的是结果,而不是过程。
  • 云无关: 能够使用一组相同的工具和工作流,无缝运行在任意云平台上。Terraform 是云无关的,使用它能把基础设施部署到 AWS 与部署到 GCP、Azure 甚至私有云一样简单。不会被特定云供应商(如 AWS CloudFormation)所绑定,也不需要在每次改变云供应商时学习一种全新的技术。
  • 表达能力强且高度可扩展:通过使用条件语句、for 表达式、指令、模版文件、动态块、变量和许多内置函数,我们可以轻松地编写代码来实现自己的目的。Terraform 提供以下特性:
    • 115+ 个函数
    • 支持条件语句
    • 支持 for 循环
    • 支持多种类型:字符串、数字、列表、映射、布尔值、对象、复杂类型
    • 支持插件
    • 模块化
    • 等待条件
    • 模板(Template)
    • 动态块
  • 协同工作:利用 Terraform 的后端(Backend)、注册表、工作空间以及代码仓库可以做到与朋友、同事协同工作。
  • 生命周期管理:Create、Read、Update、Delete(or Destory)以及可以自定义生命周期的 create_before_destory prevent_destory ignore_changes 标志。
  • 测试: 可以通过 go test 配合 fixture 测试 Terraform 代码。
  • HCL: 人机友好的结构化配置语言,用于命令行工具。尽管旨在普遍使用,但它主要针对 devops 工具、服务器等。HCL 是专门为构建结构化配置格式而设计的语法和 API。试图在通用序列化格式(如 JSON)和围绕完整编程语言(如 Ruby)构建的配置格式之间取得折衷。
  • 安全和密钥管理: 通过和 HashiCorp(Terraform 母公司) Vault 的无缝集成实现对安全和密钥的管理。

Terraform 和竞品的比较

基于以上 Terraform 的主要功能和特点,我们将 Terraform 和 它的竞品 做一个初步比较:

📝免责声明

以下仅为笔者个人观点,由于眼界和知识所限,并不一定准确。仅供参考。

  • 相比 Ansible/Chef/Puppet/SaltStack 等配置管理工具. 配置管理工具主要用途是在已经存在的机器上安装和管理软件。Terraform 不是配置管理工具,它的主要作用是置备资源。Terraform 专注于数据中心和相关服务的更高级别的抽象。另外,Ansible/Chef/Puppet/SaltStack 等主要是命令式的,Terraform 是声明式的。但是它们都有丰富的扩展和生态。
  • 相比 AWS CloudFormation/GCP Deployment Manager/Azure Resource Manager. Terraform 更好,它云无关,并且支持多个提供商和服务的组合和组合。另外 Terraform 还通过使用执行计划的概念将计划阶段与执行阶段分开,以确保它完全符合预期。
  • 相比 Pulumi. Pulumi 和 Terraform 最为类似,唯一的区别在于 Pulumi 不是声明式的。孰弱孰强各有优势。
  • 相比 CrossPlane, Terraform 在面向用户/开发人员侧的抽象能力比 CrossPlane 弱一些,另外在保障配置不漂移这方面也相比 CrossPlane 弱一些。但是 Terraform 的生态(供应商和模块)要比 CrossPlane 强的多得多。

总结

本文讨论了什么是 Terraform, 它的优势、特点、使用场景, 相对于其他 IaC 工具有哪些优缺点。

本篇基本上都是一些概念性的东西,还没有进入实战环节,敬请期待后续更新。

EOF

与Terraform 系列-Terraform 简介相似的内容:

Terraform 系列-Terraform 简介

系列文章 👉 Terraform 系列文章 前言 最近在使用 Terraform 来置备 OCI 的 Always Free Tier, 发现它非常好用。总结学习下:Terraform 的基础知识。 什么是 Terraform? Terraform 是一种基础架构即代码(IaC)工具,可让您安全高

Terraform 系列-Terraform 项目的典型文件布局

系列文章 👉 Terraform 系列文章 典型文件布局 - modules/ - services/ - webserver-cluster/ - examples/ - main.tf - outputs.tf - vars.tf - user-data.sh - README.md - [

Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?

系列文章 👉 Terraform 系列文章 前言 最近在使用 Terraform Cloud 来置备 OCI 的 Always Free Tier, 发现它非常好用,相比 Terraform OSS, 用起来省心多了。 也借此总结学习下:Terraform Cloud 比 Terraform OS

Terraform 系列-使用 for-each 对本地 json 进行迭代

## 系列文章 * [Terraform 系列文章](https://ewhisper.cn/tags/Terraform/) * [Grafana 系列文章](https://ewhisper.cn/tags/Grafana/) ## 概述 前文 [Grafana 系列 - Grafana Ter

Terraform 系列-什么是 IaC?

聊到 Terraform, 必然绕不开 IaC 这个概念?那么,什么是 IaC?

Terraform 系列-批量创建资源时如何根据某个字段判断是否创建

这几天碰到一个情况, 使用 Terraform 批量创建日志数据源时, 有的数据源类型是 ElasticSearch, 有些是 Opensearch. 那么, 如何根据某个字段(如:`es_type`)判断是否创建?

Grafana系列-GaC-1-Grafana即代码的几种实现方式

## 系列文章 * [Grafana 系列文章](https://ewhisper.cn/tags/Grafana/) * [Terraform 系列文章](https://ewhisper.cn/tags/Terraform/) ## 概述 GaC(Grafana as Code, Grafana

Grafana 系列-GaC-2-Grafana Terraform Provider 基础

本文为系列文章-Grafana GaC(Grafana 即代码) 的第二篇 - Grafana Terraform Provider 基础。

Terraform 新手村指南,萌新必读!

基础设施即代码(IaC)是指使用代码和软件开发技术来配置和管理基础设施的实践。IaC 背后的逻辑是尽量消除手动配置基础设施和资源的需求,比如服务器、负载均衡以及数据库等。由于基础设施是整个软件开发流程的一个组成部分,并且与应用交付更紧密地联系在一起,因此让基础设施的更改更容易交付十分重要。 使用代码

Terraform 改善基础架构的十个最佳实践

Terraform 是一种非常流行的开源 IaC(基础设施即代码)工具,用于定义和提供完整的基础设施。Terraform 于 2014 年推出,其采用率已在全球范围内快速增长,越来越多的开发人员正在学习 Terraform 并尝试在其组织中部署基础设施。 如果您已经开始使用 Terraform,则必