关于运维:Terraform-系列Terraform-简介

28次阅读

共计 2780 个字符,预计需要花费 7 分钟才能阅读完成。

系列文章

👉 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

三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

正文完
 0