玩转阿里云 Terraform(一):Terraform 是什么

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 从本文起,我将陆续推出一系列有关 Terraform 的文章,从概念,特点,工作机制,用法以及最佳实践等多个方面由浅入深的向大家介绍如何在阿里云上玩转 Terraform。同时也希望借此机会,与感兴趣的开发者相互探讨和学习。

从本文起,我将陆续推出一系列有关 Terraform 的文章,从概念,特点,工作机制,用法以及最佳实践等多个方面由浅入深的向大家介绍如何在阿里云上玩转 Terraform。同时也希望借此机会,与感兴趣的开发者相互探讨和学习。

作为本系列的引子,本文将从 Terraform 是什么开始介绍。

Terraform 是什么

如果两年前问 Terraform 是什么,国内熟悉它的人可能并不是很多,毕竟它是2014年的新生儿,提到资源编排,大家能优先想到的也是 AWS 的 CloudFormation,Azure 的 ARM 以及阿里云的 ROS。但是如果今天再问“Terraform 是什么”,相信很大一部分人对它不再陌生,并且一些公司或者感兴趣的开发者已经开始使用 Terraform 来管理他们的基础设施。不论是 Hashicorp 的官方宣传,还是阿里云云栖社区的布道;不论是 Devops的持续发展,还是云原生的火热传播;不论是国内最初只有阿里云支持,还是后来国内其他云厂商的陆续支持,Terraform 近两年在国内被越来越多的提及。

在此之前,不止一篇云栖文章介绍过Terraform是什么,本文将结合Terraform的官方文档,对这些文章中的介绍做一个整理和总结。

2014年,Hashicorp 公司推出了一款产品 Terraform
屏幕快照 2019-07-31 下午11.43.47.png

Terraform 官方的定义如下:

Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions.

Configuration files describe to Terraform the components needed to run a single application or your entire datacenter. Terraform generates an execution plan describing what it will do to reach the desired state, and then executes it to build the described infrastructure. As the configuration changes, Terraform is able to determine what changed and create incremental execution plans which can be applied.

The infrastructure Terraform can manage includes low-level components such as compute instances, storage, and networking, as well as high-level components such as DNS entries, SaaS features, etc.

总结起来,三句话:

  • Terraform 是一个可以安全、高效地建立,变更以及版本化管理基础设施的工具,并可在主流的服务提供商上提供自定义的解决方案。
  • Terraform 以配置文件为驱动,在文件中定义所要管理的组件(基础设施资源),以此生成一个可执行的计划(如果不可执行,会提示报错),通过执行这个计划来完成所定义组件的创建,增量式的变更和持续的管理。
  • Terraform不仅可以管理IaaS层的资源,如计算实例,网络实例,存储实例等,也可以管理更上层的服务,如DNS 域名和解析记录,SaaS 应用的功能等

更通俗的讲,Terraform 就是运行在客户端的一个开源的,用于资源编排的自动化运维工具。以代码的形式将所要管理的资源定义在模板中,通过解析并执行模板来自动化完成所定义资源的创建,变更和管理,进而达到自动化运维的目标。

Terraform 主要特点

Terraform 具备以下几个主要特点:

  • 基础设施即代码(IaC, Infrastructure as Code)
    Terraform 基于一种特定的配置语言(HCL, Hashicorp Configuration Language)来描述基础设施资源。由此,可以像对待任何其他代码一样,实现对所描述的解决方案或者基础架构的版本控制和管理。同时,通用的解决方案和基础架构可以以模板的形式进行便捷的共享和重用。
resource "alicloud_instance" "instance" {
  count = 5
  instance_name   = "my-first-tf-vm"
  image_id        = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
  instance_type   = "ecs.sn1ne.small"
  security_groups = ["sg-abc12345"]
  vswitch_id      = "vsw-abc12345"

  tags = {
    from = "terraform"
  }
}
  • 执行计划(Execution Plans)
    Terraform 在执行模板前,运行 terraform plan 命令会先通过解析模板生成一个可执行的计划,这个计划展示了当前模板所要创建或变更的资源及其属性。操作人员可以预览这个计划,在确认无误后执行 terraform apply 命令,即可完成对所定义资源的快速创建和变更,以免发生一些超预期的问题。
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # alicloud_instance.instance[0] will be created
  + resource "alicloud_instance" "instance" {
      + availability_zone          = (known after apply)
      + id                         = (known after apply)
      + image_id                   = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
      + instance_name              = "my-first-tf-vm"
      + instance_type              = "ecs.sn1ne.small"
      + security_groups            = [
          + "sg-abc12345",
        ]
      + tags                       = {
          + "from" = "terraform"
        }
      + vswitch_id                 = "vsw-abc12345"
            ...
    }

  # alicloud_instance.instance[1] will be created
  + resource "alicloud_instance" "instance" {
      ...
  }
  # alicloud_instance.instance[2] will be created
  + resource "alicloud_instance" "instance" {
      ...
  }
    ...

Plan: 5 to add, 0 to change, 0 to destroy.
  • 资源拓扑图(Resource Graph)
    Terraform 会根据模板中的定义,构建所有资源的图形,并且以并行的方式创建和修改那些没有任何依赖资源的资源,以保证执行的高效性。对于有依赖资源的资源,被依赖的资源优先执行。
  • 自动化变更(Change Automation)
    不论多复杂的资源,当模板中定义的资源内容发生变更时,Terraform 都会基于新的资源拓扑图将变更的内容plan 出来,在确认无误后,只需一个命令即可完成数个变更操作,避免了人为操作带来的错误。

Terraform 活跃的社区

Terraform 作为 DevOps 的一个利器,大大降低了基础设施的管理成本,并且随着业务架构的不断复杂,基础设施资源及其资源关系的不断复杂,Terraform 所带来的便利性和优势将越来越明显。

正因为如此,云计算火热发展的今天,Terraform 受到越来越多的云厂商和其他软件服务商的青睐。目前,Terraform 累计提供了超过100个 Providers 和 Provisioners,支持15个 Backend Types。阿里云作为国内第一家与 Terraform 集成的云厂商,目前已经提供了超过 138 个 resource 和 92 个 datasource,覆盖计算,存储,网络,负载均衡,CDN,中间件,访问控制,数据库等多个领域。并且从 Terraform 0.12.2 版本开始,阿里云 OSS 作为标准的 Backend 开始提供远端存储 State 的能力,持续提升开发者的使用体验,降低使用成本。

欢迎大家关注 Terraform,关注阿里云 Provider,如有任何使用问题,可直接在 terraform-provider-alicloud 提交您的问题,我们将尽快解决。

目录
相关文章
|
数据中心 iOS开发 MacOS
玩转阿里云 Terraform(三):Terraform 的安装和加速
本文以Mac OS为例,详细介绍如何在本地安装Terraform,并在文章最后介绍一种可以加速Terraform安装的方法。
15395 0
|
7月前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
116 0
|
Kubernetes NoSQL 持续交付
使用Terraform/Ansible/Kubernetes在阿里云上自动部署MongoDB
Terraform, Ansible, Kubernetes, MongoDB, AliCloud
417 1
EMQ
|
存储 JSON 安全
使用 Terraform 在阿里云上快速部署 MQTT 集群
本文将以分布式物联网 MQTT 消息服务器 EMQX 为例,采用阿里云作为公有云平台,介绍如何使用 Terraform 快速部署一个高可用的 MQTT 集群。
EMQ
278 0
使用 Terraform 在阿里云上快速部署 MQTT 集群
|
存储 运维 自然语言处理
“阿里云开放平台俱乐部”首站启航,助力企业基于Terraform完成上云进阶
简介:阿里云开放平台致力于帮助开发者快速上云并完成云上管理,未来将举办一系列开发者沙龙,帮助开发者解决如何“降本、提效”的管理云资源等问题
“阿里云开放平台俱乐部”首站启航,助力企业基于Terraform完成上云进阶
|
运维 架构师 数据中心
阿里云开发者 DevUP 沙龙 -北京站 -基于Terraform玩转阿里云邀你参加啦
8月22日,阿里云Terraform技术专家何贵民,携手Terraform官方资深架构师刘宇雷,为大家分享云计算行业自动化编排最前沿技术与应用,期待与您共同成长。
14676 0
阿里云开发者 DevUP 沙龙 -北京站 -基于Terraform玩转阿里云邀你参加啦
|
弹性计算 运维 自然语言处理
Terraform 支持自动化开通阿里云产品
## 什么是 Terraform 和云产品开通 **Terraform** 一款开源的运行在客户端的自动化资源编排工具,以 IaC 的理念实现云资源的自动化运维。更多细节可以参考 [Terraform 是什么](https://developer.aliyun.com/article/713099)。 **云产品开通**,顾名思义,就是阿里云客户在使用某些云产品前,需要登录云产品官方控
780 0
Terraform 支持自动化开通阿里云产品
|
架构师 Devops 数据中心
阿里云开发者DevUP沙龙·北京·基于Terraform玩转阿里云 圆满结束
本次阿里云开发者DevUP沙龙·北京·基于Terraform玩转阿里云线下技术沙龙已完美落幕,本文带你回顾基本次活动的全部干货亮点!
1592 0
阿里云开发者DevUP沙龙·北京·基于Terraform玩转阿里云 圆满结束
|
数据中心
玩转阿里云 Terraform(四):Terraform 常用命令详解
通过前几篇文章的介绍,相信大家对Terraform已经有了大致的熟悉和了解,本文将从实践开始,向大家介绍Terraform的几个常见命令。 Terraform是一个面向客户端的工具,所以对所有资源的管理都是通过Terraform命令来实现的。
12209 0
|
存储 对象存储 数据中心
五分钟入门阿里云Terraform OSS Backend
生态工具Terraform的资源编排能力在持续提升企业上云效率,降低运维成本方面越来越专业和完善。对于一个企业和团队来讲,如何保证State的安全性和如何实现对同一份资源的协同管理也是必须要关心的问题。本文将详细介绍如何在阿里云上解耦对资源模板与State管理,消除团队协作的障碍。
2298 0

推荐镜像

更多