Terraform 实践前篇 - Terraform overview

前两篇刚刚介绍了Azure中Blueprint的应用,作为一个Infrastructure as code的工具,Blueprint其实主要是用的还是ARM Template来部署资源,ARM Template主要使用的是JSON语言,港真来说,JSON对于人类的友好性还是差了点,不管是编辑还是阅读,所以,今天准备介绍另外一款更流行的IAC工具,也就是Terraform 

首先,什么是Terraform

Terraform 官网是这么定义的

Terraform is an open-source infrastructure as code software tool that provides a consistent CLI workflow to manage hundreds of cloud services. Terraform codifies cloud APIs into declarative configuration files.

抓取关键字,Terraform 是个infrastructure as code的工具,可以管理上百种cloud service,这就是Terraform的作用,可以用来管理、部署资源,实际上terraform能管理的远远不止是公有云资源,包括K8S, VMware,甚至是F5这种防火墙都可以用terraform来管理,terraform相当于是个基础的体系,制定了语法和规范,在这基础上,各个厂商都可以通过provider的形式来让terraform支持自家的产品

Provider就是Terraform用来实现IAC的方式,可以相当于是提供了Terraform和第三方平台底层的API交互,通过Provider,可以将编写的IAC代码,转换成平台可以支持的API,进而实现资源的部署、更改等操作

Terraform支持上百种provider,如果需要哪个公司的产品,可以尝试在这里找找

https://registry.terraform.io/browse/providers

值得一提的是,terraform支持的公有云厂商非常之多,囊括的不仅仅是国际知名的Ali、Azure、AWS、GCP这种一线大厂,国内像腾讯云、华为云等厂商terraform也可以支持,所以作为一个统一的跨平台IAC工具,Terrafrom绝对是非常合适的

Terraform的语法说难不难,说简单也不是特别简单,但是从编写和可读性的角度来说,其实都是要比JSON好很多的,terraform使用的是叫做HCL的语法,既不是json也不是yaml,可以说和yaml更像一些,大致写法类似下边这种格式

resource "aws_instance" "web" {
  ami           = "ami-a1b2c3d4"
  instance_type = "t2.micro"}

terraform同时其实也可以支持JSON,只不过很少有人这么用

下边简单说下terraform里一些关键性的资源和使用方法

terraform里用来定义资源的主要关键字其实就是resource,resource里可以定义我们要创建的资源,就比如下边的范例中,我们要创建的就是azure的resource group,要创建什么资源,就在resource后边加上资源的类型,资源的类型并不是我们自己指定的,而是厂商在provider里已经定义好的,我们需要遵循这些规则来创建资源,至于都可以创建哪些资源,则可以参考厂商提供的文档,举例来说,Azure的文档可以在这里找到

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs

resource "azurerm_resource_group" "rg" {
  for_each = {
    a_group = "eastus"
    another_group = "westus2"
  }
  name     = each.key
  location = each.value}


学会使用resource,最起码最基础的一些资源定义就没问题了,至于具体如何把这些资源的定义转换为实际要创建资源的操作,则是通过Terraform CLI实现,Terraform CLI是个命令行工具,我们定义好要创建的资源后,就需要通过terraform CLI进行实际的部署操作了

https://www.terraform.io/downloads.html

Terraform CLI最关键的几个命令有以下几种

  • Terraform init:  init主要是用来做初始化操作,初始化过程中可以下载需要的provider,module等等

  • Terraform Plan: plan类似于预部署模式,在这个过程中会检查语法的错误,然后根据语法中定义的内容先演练下会部署哪些资源

  • Terraform Apply: plan就是实际的部署动作了,执行了plan相当于就是执行了最终的操作,所以要慎重一些

  • Terraform Destroy: destroy会根据tfstate里的内容,把资源删除掉,所以一定要慎重

后边用个简单案例来演示下terraform怎么进行部署的操作

猜你喜欢

转载自blog.51cto.com/mxyit/2575594