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 简介的更多相关文章
- 【原创】书本翻页效果booklet jquery插件系列之简介
booklet jquery插件系列之简介 本文由五月雨恋提供,转载请注明出处. 一.安装 1.添加CSS和Javascript 添加booklet CSS文件到你的页面. <link rel= ...
- RxJava系列1(简介)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...
- OpenStack实践系列①openstack简介及基础环境部署
OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...
- epoll 系列函数简介、与select、poll 的区别
一.epoll 系列函数简介 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags) ...
- nginx高性能WEB服务器系列之一简介及安装
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- 使用 robotframework 自动化测试系列 一 -----简介
robotframework 是自动化测试框架. Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可 ...
- Unity学习系列一简介
一.简介 Unity的目标是为了提升"依赖注入"的思想,去建立更加松耦合的系统.patterns & practices 小组在那个时候实现DI的方式和我们现在认为的DI有 ...
- SuperEdge 易学易用系列-SuperEdge 简介
关于 SuperEdge SuperEdge 是由腾讯.Intel.VMware.虎牙直播.寒武纪.首都在线和美团等多家公司共同发起的边缘容器管理系统,它基于原生 Kubernetes.针对边缘计算和 ...
- UWP应用开发系列视频教程简介 - Built for Windows 10
万分感谢Fdyo同学给我们带来的有中文字幕的系列教程! http://zhuanlan.zhihu.com/MSFaith/20364660 下面是这系列video教程中的一个截图作为示例,有代码,有 ...
随机推荐
- MySql数据库读取字段错误问题
一个小小的BUG,断断续续搞了一个月才搞定,使用MySql的时候使用mysql_fetch_fields()获取的字段始终始终是错误的,因为是修改别人的代码,一直找不到问题,Debug了无数次还是搞不 ...
- [C#]delegate基础入门
参考代码1: using System; namespace DelegateDemo { class Program { public delegate void Expresser(); stat ...
- unittest框架基本使用
1.简介 unittest是python内置的单元测试框架,具备编写用例.组织用例.执行用例.输出报告等自动化框架的条件.使用unittest前需要了解该框架的五个概念: 即test case,tes ...
- 4.javaweb-thymeleaf
1.知识回顾: 1. post提交方式下的设置编码,防止中文乱码 request.setCharacterEncoding("utf-8"); get提交方式,tomcat8开始, ...
- 转帖:GitBook 从懵逼到入门
是什么? 在我认识 GitBook 之前,我已经在使用 Git 了,毋容置疑,Git 是目前世界上最先进的分布式版本控制系统. 我认为 Git 不仅是程序员管理代码的工具,它的分布式协作方式同样适 ...
- 有时候用uniapp写项目时发现,Map组件在安卓真机可以缩放和移动,但是在ios真机就不行
如果你的地图组件是放到popup组件里,是用弹框打开的,如何ios端不能缩放, 那你一定要看下这个弹框的层级是否比地图层级要高 z-index. 如果高于地图层级,那地图肯定是不能移动和缩放的
- 登录:ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME
问题描述:在用pl/sql登录soctt用户时,显示: 解决办法:在tnsnames.ora文件中添加(文件位置的查找方法见文章末尾) ORCL = (DESCRIPTION = (ADDRESS = ...
- Mysql开放读取权限
对用户授权 mysql>grant rights on database.* to user@host identified by "pass"; 例1: 增加一个用户tes ...
- 【转载】Python:logging详细版
转载自:https://www.cnblogs.com/Nicholas0707/p/9021672.html 一.logging模块 (一).日志相关概念 日志是一种可以追踪某些软件运行时所发生事件 ...
- ElasticSearch 实现分词全文检索 - term、terms查询
数据准备 ElasticSearch 实现分词全文检索 - 测试数据准备 ElasticSearch的各种查询 不会对查询关键字进行分词 term 查询 term的查询是代表完全匹配,搜索之前不会对你 ...