Terraform的几个关键概念

Terraform是由HashiCorp公司在2014年左右推出的开源工具, 目前几乎所有的主流云服务商都支持Terraform,包括腾讯云、AWS、Azure和GCP等。腾讯云在2017年即开始支持terraform进行资源编排,截止目前共有10余款基础产品完美支持terraform,涉及计算、存储、网络、数据库等类别。经过两年的多实践,包括Roit、EF和Unity等在内的众多大客户都在腾讯云上基于terraform构建自己的基础架构。

Terraform通过编写代码来实现云资源的高效编排,为了让大家更好的使用terraform,特别对几个概念做出解释。

Terraform的架构

Terraform本身是基于插件的架构,可扩展性很强,可以方便程序员对Terraform进行扩展。Terraform从逻辑上可以分为两层,核心层(Terraform Core)和插件层(Terraform Provider)。

核心层

核心层其实就是terraform的命令行工具,它是用go语言开发的,它负责:

  1. 读取.tf代码,并对配置文件和代码进行变量取值替换
  2. 资源状态文件管理
  3. 依据图论,对代码中创建的资源依赖关系进行分析,并创建依赖关系图谱
  4. 根据依赖关系图谱,执行资源先后创建。对于没有依赖关系的资源,会并行进行创建(缺省10个并行进程),这也是Terraform能够高效快速管理云资源的原因。
  5. 用RPC调用插件层

插件层

插件层也是由go语言开发的,Terraform有超过250个不同的插件,它们负责:

  1. 接受核心层的RPC调用
  2. 具体提供某一项服务的执行

插件层又有两种:

Provider

Provider,负责与外界API的集成,比如腾讯云Provider就提供了在腾讯云创建、修改、删除云资源的功能。这个插件负责和腾讯云API的接口,并提供一层抽象,这样程序员可以在不了解API细节的情况下,通过terraform来编排资源。它负责:

  1. 初始化以及外界API通信
  2. 外界API的认证
  3. 定义云资源与外界服务的关系

Provisioner

Provisioner,负责在资源创建或者删除完成后,执行一些脚本。比如Puppet Provisioner就可以在云虚拟机资源创建完成后,在该资源上下载、安装、配置Puppet agent。

声明式语言在云资源编排的好处

Terraform是通过HashiCorp Configuration Language来编写代码的,HCL是声明式的,也就是说,程序员用HCL来描述整个基础架构应该是什么样的,然后把具体的实施工作交给Terraform就可以了,程序员不需要了解实施的具体步骤和细节,不需要了解terraform如何与云服务商的API进行对接。Terraform会根据代码,自动下载相应的Provider和Provisioner来负责具体步骤和细节。于声明式对应的是命令式。命令式语言是按照步骤执行的,先后顺序很重要,对固定输入执行命令式语言会得到固定的输出。声明式和命令式并无高下之分,只是在云资源编排这一领域,声明式会比较方便实现。我们日常见到的云资源编排工具都是声明式的,包括AWS CloudFormation、Azure Resource Template、Google Cloud Deoplyment Manager。大家如果通过调用腾讯云API来在腾讯云上实施资源编排,那通常就是命令式的。

资源状态文件

Terraform初始化以后,会生成一个状态文件,该状态文件记录了最近一次操作的时间、各资源的相关属性、各变量的当前值、状态文件的版本、等等。下一次再操作的时候,terraform首先会把当前状态文件与云服务商上的状态进行一次更新,找出是否后有被删除或者更改了的资源,然后再根据.tf文件,决定那些资源需要删除、更新、创建。操作完成后,会重新生成一个状态文件。

Terraform后台

基于资源状态文件的重要程度,它的完整性就非常重要了。一般而言,对这个文件我们至少需要做到在操作开始时自动加锁,直到操作结束,这样别人无法更改。另外还需要做到版本跟踪,这样可以知道云资源的变化情况。状态文件也有可能存有敏感信息,比如在腾讯云上创建cvm时用的密码,所以状态文件的读取权限也需要严格控制。Terraform后台的概念就跟状态文件如何读取、存储、锁定,以及terraform apply如何执行严密相关。terraform缺省使用本地后台,也就是说,状态文件会存放在当前目录下,terraform代码的执行也在本地虚拟机运行。这对一个人管理的云资源是没有问题的,但当团队人员数目加多以后,大家可能都有自己的工作台,但是需要一个共有的地方来存储资源状态文件。这是后就可以用到远程存储。目前terraform支持多种远程存储后台,包括AWS s3,Hashicorp Consul,etcd,Terraform云,以及terraform企业版等等,这些远程后台都提供在远程存储、锁定状态文件。其中terraform企业版提供远程运行terraform,以及其他一些企业级特性。

Terraform模块

牛顿曾经说过:如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。人类进步就是因为我们可以重新使用前人的发现和创造的知识、工具。作为程序员,我们最喜欢的就是代码重用。Terraform模块就是把一些高度可重用的代码写成模块,方便其他人使用。模块由输入参数、输出参数以及主逻辑组成。这就跟传统编程语言里的函数很像。Terraform提供了公开的模块注册器,模块编写完成以后,只要符合规范,就可以发布到模块注册器中让大家使用。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生态产品

如何高效的进行腾讯云上的资源编排,一起来聊一聊Terraform

“腾讯云IaC最佳实践”系列文章希望通过介绍Terraform、Chef和Ansible等生态产品工具及相关案例,使用户能够更好地在腾讯云上实践IaC,为腾讯云...

13.3K340
来自专栏腾讯云IoT

【IoT迷你赛】我来点个灯

板子5,6年没玩了,很荣幸有机会参加这次体验,开启不一样的旅程。前几天收到了腾讯云Iot的开发版,还是比较兴奋的。

37580
来自专栏腾讯云IoT

【IoT迷你赛】五分钟简明魔法系列1 - 5分钟让你的温度计上云~

TencentOS tiny已经内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),并有现成的连接腾讯云例程...

339120
来自专栏.Net框架学苑

Ocelot(二)- 请求聚合与负载均衡

在上一篇Ocelot的文章中,我已经给大家介绍了何为Ocelot以及如何简单使用它的路由功能,如果你还没有不了解Ocelot为何物,可以查看我的系列文章 Oce...

13710
来自专栏全民云计算

wordpress接入腾讯COS云存储

便宜:腾讯云免费额度是50G存储空间、50G/月免费流量。这样的免费额度对于小站长已经足够使用。

47660
来自专栏云服务器999+

腾讯云云开发入门

腾讯云开发目前仅支持通过云开发控制台来登录和管理您的云服务。云开发提供基础能力的 SDK,通过云开发的 SDK,即可在您的移动应用中使用云开发所提供的数据库、存...

8810
来自专栏腾讯云人工智能

腾讯知文自然语言处理平台上云实践

  笔者自去年年底开始负责腾讯知文自然语言处理平台的公有云研发以及其标准化产品的私有化交付。依托于团队过往在内部业务的NLP沉淀,深度整合公司内部优秀的NLP技...

8.7K230
来自专栏云服务器999+

腾讯云 CVM 入门

腾讯云目前支持三种不同的方式来登录和管理您的 CVM, 请您根据自身场景灵活选择登录方式:控制台,CLI 和 API/SDKs。

14600
来自专栏腾讯云serverless的专栏

课程回顾:API网关技术最佳实践

随着企业信息系统复杂度的提高,如何统一管理、如何协调多种协议、如何保障外部的安全访问等问题也随之而来。而如今,API网关很好的解决了这一系列问题。通过 API ...

47020

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励